swift - 在 SwiftUI 中使用参数初始化 @StateObject

标签 swift swiftui xcode12

我想知道目前(在询问时,第一个 Xcode 12.0 Beta)是否有初始化 @StateObject 的方法。带有来自初始化程序的参数。
更具体地说,这段代码可以正常工作:

struct MyView: View {
  @StateObject var myObject = MyObject(id: 1)
}
但这不会:
struct MyView: View {
  @StateObject var myObject: MyObject

  init(id: Int) {
    self.myObject = MyObject(id: id)
  }
}
据我了解@StateObject的作用是使 View 成为对象的所有者。
我使用的当前解决方法是传递已经初始化的 MyObject 实例,如下所示:
struct MyView: View {
  @ObservedObject var myObject: MyObject

  init(myObject: MyObject) {
    self.myObject = myObject
  }
}
但是现在,据我所知,创建对象的 View 拥有它,而这个 View 没有。
谢谢。

最佳答案

这是解决方案的演示。使用 Xcode 12b 测试。

class MyObject: ObservableObject {
    @Published var id: Int
    init(id: Int) {
        self.id = id
    }
}

struct MyView: View {
    @StateObject private var object: MyObject
    init(id: Int = 1) {
        _object = StateObject(wrappedValue: MyObject(id: id))
    }

    var body: some View {
        Text("Test: \(object.id)")
    }
}

关于swift - 在 SwiftUI 中使用参数初始化 @StateObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62635914/

相关文章:

IOS Swift 卡效果图像被剪裁

iOS 模拟器在启动时崩溃

swift - Xcode 12 Interface Builder 显示 “No selection”

ios - 错误 : using bridging headers with module interfaces is unsupported Command CompileSwiftSources failed with a nonzero exit code

ios - 使用 XMSegmentedControl 更改 TableViewCell

arrays - 如何将值添加到存储在 map 中的数组?

swift - 如何更改导航栏的颜色?

ios - 如何使用 swiftUI 将文本置于圆形按钮内?

swift - HStack 和 TextField 的角半径不更新

SwiftUI 在详细 View 中覆盖导航栏外观