【发布时间】:2019-06-05 21:52:32
【问题描述】:
在 Swift 5.1 中存在不透明类型。我看到了,例如body 是必需的协议变量。它的合约定义如下:
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' 类型仅针对声明的属性类型实现 和下标以及函数的返回类型
我是否能够使用 some View 类型的不可变 body 变量来遵守 View(未将其显式标记为 AnotherView)? AnotherView 是some View,我不明白为什么我不能将AnotherView 的实例分配给body。我想保持灵活性并且不暴露结构体外部的实际实现类型,但我想直接在初始化器内部初始化它(因为我在初始化器内部传递值,制作更多属性并在 body 属性中使用它们是详细)。
【问题讨论】: