为什么String.publisher触发不了?

Why String.publisher can't be triggered?

我在 Playground 中执行我的代码:

import PlaygroundSupport
import Combine

PlaygroundPage.current.needsIndefiniteExecution = true

var s = "a"
let sb = s.publisher
    .sink(receiveValue: {
        print("rec: \([=11=])")
    })

let s0 = Timer.publish(every: 1.0, on: .main, in: .common)
.autoconnect()
.sink(receiveValue: {_ in
    print("tiktok...")
    s.append("not work!")
})
s.append("not work too!")

我的问题是为什么我修改了s值后s.publisher无法触发???

您的 sb publisher 发出所有值并成功完成。这就是为什么在将字符附加到您的初始字符串后,它不会触发发布事件

问题是 Array.Publisher 只是发出数组的所有元素然后完成。它不等待数组的变化。

如果您想在每次 String 更改其值时发出一个值,您需要将 String 作为 @Published 存储在 class 中并订阅Published 属性.

的发布者
class StringPublisher: ObservableObject {
    @Published var value: String

    init(value: String) {
        self.value = value
    }
}

let s = StringPublisher(value: "a")
let sb = s.$value.sink(receiveValue: {
    print("rec: \([=10=])")
})

let s0 = Timer.publish(every: 1.0, on: .main, in: .common)
.autoconnect()
.sink(receiveValue: {_ in
    print("tiktok...")
    s.value.append("now work!")
})

s.value.append("now work too!")