【发布时间】:2020-06-09 20:52:52
【问题描述】:
import UIKit
import Combine
class ViewController: UIViewController {
@IBOutlet weak var allowMessageSwitch: UISwitch!
@IBOutlet weak var sendButton: UIButton!
@IBOutlet weak var messageLabel: UILabel!
@Published var canSendMessages: Bool = false
@Published var newMsg: String = ""
private var switchSubscriber: AnyCancellable?
private var btnSubscriber: AnyCancellable?
override func viewDidLoad() {
allowMessageSwitch.isOn = false
super.viewDidLoad()
setupProcesscingChain()
}
func setupProcesscingChain() {
switchSubscriber = $canSendMessages.receive(on: DispatchQueue.main).assign(to: \.isEnabled, on: sendButton)
btnSubscriber = $newMsg.receive(on: DispatchQueue.main).assign(to: \.text, on: messageLabel)
}
@IBAction func didSwitch (_ sender: UISwitch) {
canSendMessages = sender.isOn
}
@IBAction func sendMessage( _ sender: Any) {
}
}
我收到错误
btnSubscriber = $newMsg.receive(on: DispatchQueue.main).assign(to: \.text, on: messageLabel)
错误信息是
没有更多上下文的表达类型是模棱两可的
我不明白为什么 label 不能用作 Switcher (bool)
我认为这是因为\.isEnabled 不是可选的,而\.text 是可选的..??
我怎样才能使用相同的格式进行这项工作。这是为了练习和了解 Combine 的工作原理。请帮忙!
【问题讨论】:
-
非常好的使用已发布。 (在这种情况下可以使用 setter 观察者。)