iOS Combine框架@Published不捕获修改后的值



我注意到sink只被调用一次

class StorefrontViewModel {
@Published var page = 0
@Published var string = "lorem ipsum"
private var cancellableBag = Set<AnyCancellable>()
init() {
let publisher = $page
.map { [unowned self] in
return $0 == 1 ? self.string.lowercased() : self.string.uppercased()
}
publisher
.eraseToAnyPublisher()
.assign(to: .string, on: self)
.store(in: &cancellableBag) // must store the subscriber to get the events
}
}
var pager = StorefrontViewModel()
pager.$string.sink {  print($0)}
pager.page = 1 // lorem ipsum
pager.page = 2 // LOREM IPSUM
pager.page = 3 // LOREM IPSUM
pager.page = 4 // LOREM IPSUM
pager.page = 1 // lorem ipsum
pager.page = 1 // lorem ipsum

这是LOREM IPSUM的输出。

想知道为什么sink被调用,即使我多次设置pager.page

您从未存储来自sink的取消令牌,因此流立即被取消。以后,不要忽略编译器给你的警告。

相关内容

  • 没有找到相关文章

最新更新