【问题标题】:Subscribing to changes to @Published订阅对@Published 的更改
【发布时间】:2020-01-03 05:48:56
【问题描述】:

我正在尝试将query 的值绑定到位于SwiftUI 视图中的搜索框。

class DataSet: ObservedObject {

... 

@Published var query: String = ""

init() {
    let sub = AnySubscriber<String, Never>(
        receiveSubscription: nil,
        receiveValue: { query in
            print(query)
            return .unlimited
        })
    self.$query.subscribe(sub)
}

...
}

当用户更改query 的值时,我想过滤ObservedObject 中的一些其他属性。然而,我在文档中找不到任何地方如何订阅对query 属性的更改。

【问题讨论】:

    标签: ios swiftui combine


    【解决方案1】:

    我会使用以下方法

    class DataSet: ObservableObject {
    
        @Published var query: String = ""
    
        private var subscribers = Set<AnyCancellable>()
        init() {
            self.$query
                .sink { newQuery in
                        // do something here with newQuery
                }
                .store(in: &subscribers)
        }
    }
    

    【讨论】:

    • 谢谢!解释如下:订阅一旦超出范围就会被取消。因此,如果我们不存储 sink 订阅,它将在 init() 结束时消失。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多