在 Swift 5.1 中有不透明的类型。我看到 egbody
是必需的协议变量。它的合同定义如下:
var body: Self.Body { get }
这意味着我们应该能够将 body 标记为不可变(否set
)。这必须怎么做?不透明的变量类型是否可能是不可变的?我试过了:
import SwiftUI
struct ContentView : View {
init() {
body = AnotherView(body: Text(""))
}
let body: some View
}
struct AnotherView: View {
var body: Text
}
但是我得到了AnotherView
必须转换为的错误some View
。这样做之后,我得到了错误:
'some' 类型仅针对属性和下标的声明类型以及函数的返回类型实现
我是否能够符合类型View
的不可变body
变量some View
(不将其显式标记为AnotherView
)?AnotherView
是some View
,我不明白为什么我不能只分配AnotherView
to的实例body
。我想保持灵活性并且不暴露结构体外部的实际实现类型,但我想直接在初始化器内部初始化它(因为我在初始化器内部传递值,制作更多属性并在 body 属性中使用它们是详细)。