Rya*_*yan 8 swift swiftui combine
我想@State在UI和计算值中都使用变量。
例如,假设我有一个TextField约束@State var userInputURL: String = "https://"。我将如何处理并将其userInputURL连接到发布商,以便将map其集成到URL。
伪代码:
$userInputURL.publisher()
.compactMap({ URL(string: $0) })
.flatMap({ URLSession(configuration: .ephemeral).dataTaskPublisher(for: $0).assertNoFailure() })
.eraseToAnyPublisher()
Run Code Online (Sandbox Code Playgroud)
您不能将@state转换为发布者,但可以改用ObservableObject。
import SwiftUI
final class SearchStore: ObservableObject {
@Published var query: String = ""
func fetch() {
$query
.map { URL(string: $0) }
.flatMap { URLSession.shared.dataTaskPublisher(for: $0) }
.sink { print($0) }
}
}
struct ContentView: View {
@ObservedObject var store = SearchStore()
var body: some View {
VStack {
TextField("type something...", text: $store.query)
Button("search") {
self.store.fetch()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |