示例代码
struct ConstructorView: View {
@Binding var isShow: Bool
var body: some View {
Text(/@START_MENU_TOKEN@/"Hello, World!"/@END_MENU_TOKEN@/)
}
}
问题
有些情况下,需要在View的构造器下,初始化一些数据。
这时候需要重写一下构造器
由于@Binding属性的存在,让重写构造器变得不那么简单
// 编译器提示的
init(isShow: Bool) {
self.isShow = isShow
}
// 可能你会想当然赋值的。 但是$ 所引用的projectedValue是只读的
init(isShow: Binding<Bool>) {
self.$isShow = isShow
}
解决
// 下划线赋值即可解决
init(isShow: Binding<Bool>) {
_isShow = isShow
}
分析
暂时还没想到
init(isShow: Binding<Bool>) {
_isShow = isShow
let a = _isShow // Binding<Bool> 类型
let b = self.isShow // Bool类型
let c = self.$isShow // Binding<Bool> 类型
}
目前能想到的时候,_isShow直接访问属性,没有通过属性set方法进行访问。