为什么建议在Swift协议中使用static作为属性需求的前缀?

时间:2016-05-15 08:51:02

标签: swift

Swift documentation section about Protocols中写道:

  

在协议中定义类型属性要求时,始终使用static关键字作为前缀类型属性要求。即使类型属性要求在类实现时可以以classstatic关键字为前缀,此规则也适用

我不明白你是否总是这样做或仅在特定情况下(因为在文档的后面,static并不总是存在)。

为什么建议使用static?具体是什么意思?

谢谢。

编辑:同样的问题适用于方法要求。

1 个答案:

答案 0 :(得分:4)

  

稍后在文档中,静态并不总是存在

本节讨论类型要求,即要求符合类型具有特定名称和类型的static属性。换句话说,当你写这个

protocol MyProtocol {
    static var myProperty: Int { get set }
}

符合要求的班级必须这样做

class MyClass : MyProtocol {
    static var myProperty: Int
}// ^^^^^^

它还有一个选项:

class MyClass : MyProtocol {
    class var myProperty: Int
}// ^^^^^

但在定义协议时没有这样的选择。

如果未使用static,则会在稍后的文档中发生,要求变为实例要求,而不是类型要求

protocol MyProtocol2 {
   var myProperty2: Int { get set }
}

现在该类必须提供一个实例变量:

class MyClass2 : MyProtocol2 {
    var myProperty2: Int
}

请注意,在声明协议中的实例要求时存在类似的限制:您始终使用var,即使实现可能使用let来满足要求:

protocol MyProtocol3 {
    var myProperty3: Int { get }
}// ^^^
class MyClass3 : MyProtocol3 {
    let myProperty3 = 42
}// ^^^