为什么我不能在Swift中使用let in协议?

Massimo Polimeni:

我对Swift中使用var关键字{get set}的协议有疑问

Apple文档

如果协议要求某个属性是可获取和可设置的,则该常量要求不能由常量存储属性或只读计算属性来满足。如果协议仅要求一个属性是可获取的,则该要求可以由任何种类的属性来满足,并且如果该属性对您自己的代码有用,则该属性也可以设置为有效。

属性要求始终声明为变量属性,并以var关键字为前缀。通过在类型声明后写{get set}来指示可获取属性和可设置属性,通过写{get}来指示可获取属性。

我不明白为什么我不能使用let一个变种中,只有一个协议获取不只是

像这样:

protocol someProtocol 
{
   var someProperty: String { get }
}

这不只是:

protocol someProtocol 
{
   let someProperty: String
}

我想念什么吗?

luk2302:

“协议中只有get的var不仅仅是让吗?” 否。A let表示常数。但这不是事实。考虑以下:

protocol SomeProtocol {
    var someProperty: String { get }
}

class SomeClass : SomeProtocol {

    var someProperty: String = ""

    func cla () {
        someProperty = "asd"
    }
}

let someInstance = SomeClass()

print(someInstance.someProperty) // outputs ""
someInstance.cla()
print(someInstance.someProperty) // outputs "asd"

该协议指定哪些符合类节目到外-类型的某些属性String命名someProperty,你可以至少获得。

如果协议指定,则{ get }您的班级可以选择通过进行遵循,let someProperty: String = ""但是它可以类似地选择通过上述代码进行遵循。另一方面,如果协议指定{ get set }您不能let在实现中使用,但也必须使其可设置。

协议不能简单地定义一个值必须是常量,也不应该定义一个常量,即,实现细节必须由实现它的类/结构来照顾(或决定)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章