订阅 @Published 的更改

huangapple go评论68阅读模式
英文:

Subscribing to changes to @Published

问题

我正在尝试将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属性更改的任何信息。

英文:

I am trying to bind the value of query to a search box sitting in a SwiftUI view.

class DataSet: ObservedObject {

... 

@Published var query: String = &quot;&quot;

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

...
}

When the user changes the value of the query I'd like to filter some other property in my ObservedObject. Yet I cannot find anywhere in the documentation how do I subscribe to changes to query property.

答案1

得分: 6

我会使用以下方法:

class DataSet: ObservableObject {
    
    @Published var query: String = ""
    
    private var subscribers = Set<AnyCancellable>()
    init() {
        self.$query
            .sink { newQuery in
                // 在这里处理newQuery
            }
            .store(in: &subscribers)
    }
}
英文:

I would use the following approach

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

huangapple
  • 本文由 发表于 2020年1月3日 13:48:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/59573754.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定