Swift:将协议变量实现为惰性变量?
发布时间:2020-12-14 05:26:35 所属栏目:百科 来源:网络整理
导读:看来,使用惰性变量实现协议所需的变量是不可能的.例如: protocol Foo { var foo: String { get }}struct Bar: Foo { lazy var foo: String = "Hello World"} 编译器抱怨Type’Bar’不符合协议’Foo’. 也不可能在协议声明中添加lazy关键字,因为在协议要求错
看来,使用惰性变量实现协议所需的变量是不可能的.例如:
protocol Foo { var foo: String { get } } struct Bar: Foo { lazy var foo: String = "Hello World" } 编译器抱怨Type’Bar’不符合协议’Foo’. 也不可能在协议声明中添加lazy关键字,因为在协议要求错误上不允许“懒惰”. 这根本不可能吗?
引用
the Language Guide – Properties – Lazy Stored Properties [强调我的]:
即,该值在首次使用时发生变异.由于foo已经在Foo协议中被蓝图打印为get,隐式非变换get,因此值类型Bar不会使用其惰性属性foo(具有变异getter的属性)来实现此承诺. 将Bar更改为引用类型将允许它实现Foo蓝图(因为改变引用类型的属性不会改变类型实例本身): protocol Foo { var foo: String { get } } class Bar: Foo { lazy var foo: String = "Hello World" } 另外,在Foo的foo属性的蓝图中指定它有一个变异的getter. protocol Foo { var foo: String { mutating get } } struct Bar: Foo { lazy var foo: String = "Hello World" } 有关getter和setter的mutating / nonmutating说明符的一些其他详细信息,请参阅以下Q& A: > Swift mutable set in property (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |