gpt4 book ai didi

SwiftUI 如何将数据传递到 ObservedObject 函数

转载 作者:行者123 更新时间:2023-11-30 10:31:50 24 4
gpt4 key购买 nike

我是 SwiftUI 和 Swift 的新手。每当用户在搜索栏中输入内容时,我都会收到一个搜索栏和一个 ListView ,我会发出一个 http 请求,然后就会出现新数据。问题是该列表没有使用新数据进行更新,我想我知道原因。 我需要将 SearchBar 响应传递到 ObservedObject 变量。我正在读这篇文章swiftui ObservedObject function call in all view但我仍然没有找到我的答案。这是我的代码

struct RegistrationView: View {

@State private var searchTerm: String = ""
@State var txt = "" // Txt has the SearchBar text
@ObservedObject var getData = datas(location: "") // I need to pass it here

var body: some View {
VStack {

Text("Registration")
searchView(txt: $txt)
// datas(location: txt)
NavigationView {
List(getData.jsonData.filter{ txt == "" ? true : $0.name.localizedCaseInsensitiveContains(txt)}) { i in
ListRow(name: i.name,statelong: i.statelong)

}

}
.padding(.top, 5.0)

}

}
}

class datas: ObservableObject
{
@Published var jsonData = [datatype]()

init(location: String) {

let session = URLSession(configuration: .default)
if location == "" {
return
}
let parameter = "location=\(location)"
if location == "" {
return
}
let url = URL(string:"url")!
let request = RequestObject(AddToken: true, Url: url, Parameter: parameter)
session.dataTask(with:request, completionHandler: {(data, response, error) in
do
{
if data != nil
{
let fetch = try JSONDecoder().decode([datatype].self, from: data!)
DispatchQueue.main.async {
self.jsonData = fetch
print(fetch)
}
}
}
catch
{
print(error.localizedDescription)
}


}).resume()
}

}

在上面的代码中,我想将 txt 变量传递到 getData 变量中,或者执行类似这样的操作 @ObservedObject var getData = datas(location: txt)。当 SearchBar 更新时, txt 会获取插入到 SearchBar 中的任何内容。

如果我做这样的事情

@ObservedObject var getData = datas(位置:“我”)

然后列表将更新并正确包含以 Me 开头的所有内容,我唯一的问题是获取数据中的 SearchBar 值,因此我不必对内容进行硬编码。如前所述,我需要将 txt 传递给 datas 。任何帮助都会很棒

最佳答案

您不需要使用该变量init该类。您只需为此创建一个函数并在需要时获取它即可。可能只有一次。

class datas: ObservableObject {
@Published var jsonData = [datatype]()

func get(location: String) {
let session = URLSession(configuration: .default)
guard !location.isEmpty else { return }
let parameter = "location=\(location)"
let url = URL(string:"url")!
let request = RequestObject(AddToken: true, Url: url, Parameter: parameter)
session.dataTask(with:request, completionHandler: {(data, response, error) in
do {
guard data != nil else { return }
let fetch = try JSONDecoder().decode([datatype].self, from: data!)
DispatchQueue.main.async {
self.jsonData = fetch
print(fetch)
}
} catch {
print(error.localizedDescription)
}
}).resume()
}
}

关于SwiftUI 如何将数据传递到 ObservedObject 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59020833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com