Swift Combine вопрос с UILabel подписаться

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)

сообщение об ошибке

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

Я не понимаю, почему ярлык не работает как Switcher (булево)

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

как я могу заставить это работать с тем же форматом. это для практики и для понимания того, как работает Combine .. пожалуйста, помогите!


person Kyo Heo    schedule 26.02.2020    source источник
comment
Очень хорошее использование опубликованного. (В этой ситуации можно было бы использовать установщик-наблюдатель.)   -  person matt    schedule 26.02.2020


Ответы (1)


lableSubscriber = $newMsg.receive(on: DispatchQueue.main).assign(to: \.text!, on: messageLabel)

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

person Kyo Heo    schedule 26.02.2020
comment
Не идеальное решение. Лучше сопоставить с Необязательным. См. stackoverflow.com/questions/59637100/ - person matt; 26.02.2020