SwiftUI 如何将数据传递给 ObservedObject 函数
Posted
技术标签:
【中文标题】SwiftUI 如何将数据传递给 ObservedObject 函数【英文标题】:SwiftUI How can I pass in data into an ObservedObject function 【发布时间】:2019-11-24 18:08:05 【问题描述】:我是 SwiftUI 和 Swift 的新手。每当用户在搜索栏中键入内容时,我都会得到一个搜索栏和一个列表视图,我会发出一个 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(location: "Me")
然后列表将更新并正确包含以 Me 开头的所有内容,我唯一的问题是在数据中获取 SearchBar 值,因此我不必硬编码。如前所述,我需要将 txt 传递给 datas 。任何帮助都会很棒
【问题讨论】:
【参考方案1】:您不需要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 函数的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据传递给BottomSheetDialogFragment [重复]
Ios:如何将数据传递给 UISplitViewController?