我想知道目前(在提出问题时,第一个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的作用是使视图成为对象的所有者.

struct MyView: View {
  @ObservedObject var myObject: MyObject

  init(myObject: MyObject) {
    self.myObject = myObject
  }
}

但现在,据我所知,创建对象的视图拥有它,而这个视图没有.

谢谢

推荐答案

下面是解决方案的演示.用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相关问答推荐

为表单部分赋予背景 colored颜色 /渐变

变量捕获:变量在函数闭包中的行为

SwiftData查询按日期排序的项的属性数组

RealityKit(VisionOS)中的PhysicBodyComponent和DragGesture

如何把多个可观测性变成一个完备性?

为什么变量不存储在 Swift 的过程数据区中

根据其属性组合 2 个模型以在 Swift 中创建另一个模型

在 Swift 中将异步任务包装到 DispatchWorkItem 中以使其可取消?

Swift:结果的失败类型不能是协议 - Type 'any ShadowError' cannot conform to Error

确定路径是否相交的有效方法

如何使用带有 span 样式标签的 Swift XMLParser

使 Swift 并发中的任务串行运行

如何在 Swift 中将 UILabel 居中?

在 Swift for iOS 中沿圆形路径绘制文本

Type 应该采用什么协议来让泛型函数将任何数字类型作为 Swift 中的参数?

如何在 GCD 中停止 DispatchWorkItem?

自定义 MKAnnotation 标注视图?

swift 3 如何获取明天和昨天的日期(注意特殊情况)新月或新年

Swift 2.0 按属性对对象数组进行排序

判断用户是否登录到 iCloud?Swift /iOS