Swift Combine вопрос с UILabel подписаться - PullRequest
1 голос
/ 26 февраля 2020
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)

Сообщение об ошибке:

Тип выражения неоднозначен без дополнительного контекста

I не понимаю, почему label не работает как Switcher (bool)

Я предполагаю, что это потому, что \.isEnabled не является обязательным, а \.text является необязательным .. ??

как я могу сделать эта работа с тем же форматом. это для практики и для понимания работы комбайна .. помогите пожалуйста

1 Ответ

0 голосов
/ 26 февраля 2020
lableSubscriber = $newMsg.receive(on: DispatchQueue.main).assign(to: \.text!, on: messageLabel)

Я решил это сам! это было очень просто. просто принудительно разверните keyPath.

...