如何将绑定变量传递给 ObservableObject?
Posted
技术标签:
【中文标题】如何将绑定变量传递给 ObservableObject?【英文标题】:How to pass Binding variable to an ObservableObject? 【发布时间】:2021-05-26 14:52:33 【问题描述】:我有一个绑定变量需要传递给 swiftUI 中的 ObservableObject。
假设我有这个代码:
struct MYView: View
@ObservedObject var fetch = Fetch()
@Binding var IDTxt: Int
var body: some View
//some code here
现在我想将IDTxt
值传递给这个:
public class Fetch: ObservableObject
//I need to pass the Binding variable here. something like this?
@Binding var IDTxt: Int
init()
load()
func load()
//So I can use it here like this:
let url = URL(string: "http://someurl.com/\(IDTxt)")
有人可以就上述问题提出建议吗?
【问题讨论】:
【参考方案1】:您不需要传递 Binding 值。但是你可以直接传递值。
public class Fetch: ObservableObject
var IDTxt: Int
init(id: Int)
self.IDTxt = id
load()
func load()
//So I can use it here like this:
let url = URL(string: "http://someurl.com/\(IDTxt)")
struct MYView: View
@ObservedObject var fetch: Fetch
@Binding var IDTxt: Int
init(IDTxt: Binding<Int>)
self._IDTxt = IDTxt
self.fetch = Fetch(id: IDTxt.wrappedValue)
var body: some View
//some code here
Color.red
如果您想观察 IDTxt 文本,请在课堂上使用 @Published
。
public class Fetch: ObservableObject
@Published var IDTxt: Int
【讨论】:
我收到此错误:类型“Fetch.Type”不能符合“ObservableObject” @roozfar 在我的系统中编译得很好。你在哪里得到这个错误? 这里:@ObservedObject var fetch: Fetch 您可以尝试将此代码添加到新项目中吗?问题可能出在其他地方。【参考方案2】:如果您尝试注入Fetch
的属性来自父视图,则不需要Binding
s。您可以简单地在 init 中注入值。
另外,如果您在View
中创建ObservableObject
,则需要将其声明为@StateObject
。 @ObservedObject
只能在将对象注入视图时使用。
public class Fetch: ObservableObject
init(id: Int)
load(id: id)
func load(id: Int)
let url = URL(string: "http://someurl.com/\(id)")
struct MYView: View
@StateObject private var fetch: Fetch
init(id: Int)
self._fetch = StateObject(wrappedValue: Fetch(id: id))
var body: some View
EmptyView()
【讨论】:
@roozfarCombine
的基本构建块之一。当您创建Subscription
时,将返回一个AnyCancellable
,并且只要您持有对AnyCancellable
的引用(或者直到您手动调用cancel
),订阅才会保持活动状态。
您的代码似乎与我正在尝试做的相反!您是否将 IDTxt 传递给 MyView?
@roozfar 您正试图根据来自视图的idTxt
调用load
,对吧?这正是我的代码正在做的事情。 idText
使用用户输入到 TextField
的值进行更新,Fetch
使用该值调用 load。
对不起,IDTxt 已经是从另一个视图传递到我的 MYView 的变量。现在我需要在 Fetch 中使用它:ObservableObject ... there's no TextInput.
@roozfar 更新了我的答案以符合您的要求以上是关于如何将绑定变量传递给 ObservableObject?的主要内容,如果未能解决你的问题,请参考以下文章