![](/img/trans.png)
[英]How to show big button without clicking button (clicking area around that button) in iOS
[英]How to do network request without clicking at button
我有一個文本字段,當我寫 smth 時我需要它。 在文本字段中,它無需單擊任何按鈕即可向服務器發送請求。 例如,如果我發送的文本與服務器的文本相同,它會打印該文本。 我正在使用 SwiftUI 並結合。 下面是我的代碼。
@State var cancellable: AnyCancellable?
.onReceive(Just($homePageVM.orderNumber)) { res in
if !homePageVM.orderNumber.isEmpty {
cancellable = homePageVM.orderNumber
.publisher
.receive(on: RunLoop.main)
.sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: { value in
homePageVM.getVoucherInfo { result in
if homePageVM.orderNumber == homePageVM.getVoucherInfoModel?.orderNumber {
print(result)
}
}
})
}
}
我正在使用onreceive ,因為每次更改文本時都需要發送數據。 但結果我收到了一個無休止的循環。 每次更改文本時,如何僅發送一次數據? 請幫我。
將onReceive
與Just
和sink
一起使用很奇怪,使用 Combine 根本沒有意義。 onChange
修飾符將取代所有這些。 但是,只需使用多個 View 結構和task
修飾符即可完成您需要的最佳方式,例如
struct View1: View {
...
var body: some View {
View2(orderNumber: model.orderNumber)
}
}
struct View2: View {
let orderNumber: Int
@State var result: String?
// body called when any of the properties change
var body: some View {
Text(result ?? "No result")
.task(id: orderNumber) { newOrderNumber in
result = await fetchVoucherInfo(orderNumber: newOrderNumber)
} // The `task` is started if the orderNumber has changed.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.