16

次のコードでは、ボタンが押されたときに「Test」がコンソールに出力されるはずですが、そうではありません。イベントはパブリッシャー経由で送信されません。Xcode 11 Beta 5 の PassthroughSubject で何が起こったのか考えていますか? (Xcode 11 Beta 4 ではうまく動作します)

var body: some View {  

    let publisher = PassthroughSubject<String, Never>()

    publisher.sink { (str) in  
        print(str)  
    }  
    return Button("OK") {  
        publisher.send("Test")  
    }  
}

PSボタンが押されたときに文字列を出力する方法が他にもあることは知っています。単純な送受信の例を示したいだけです

4

2 に答える 2

13

シンクをサブスクライブするときに .store がありません。.onReceive を使用できますが、.store(in: &subscription) を追加する必要があるため、コードは値を受け取りません。

var body: some View {  
    var subscription = Set<AnyCancellable>()
    let publisher = PassthroughSubject<String, Never>()

    publisher.sink { (str) in  
        print(str)  
    }.store(in: &subscription)

    return Button("OK") {  
        publisher.send("Test")  
    }  
}
于 2019-11-09T09:37:52.367 に答える