Swift:将协议变量实现为惰性变量?

Swift:将协议变量实现为惰性变量?,第1张

概述看来,使用惰性变量实现协议所需的变量是不可能的.例如: 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 [强调我的]:

A lazy stored property is a property whose initial value is not
calculated until the first time it is used
.

即,该值在首次使用时发生变异.由于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

总结

以上是内存溢出为你收集整理的Swift:将协议变量实现为惰性变量?全部内容,希望文章能够帮你解决Swift:将协议变量实现为惰性变量?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1032200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存