在Swift documentation section about Protocols中写道:
在协议中定义类型属性要求时,始终使用
static
关键字作为前缀类型属性要求。即使类型属性要求在类实现时可以以class
或static
关键字为前缀,此规则也适用
我不明白你是否总是这样做或仅在特定情况下(因为在文档的后面,static
并不总是存在)。
为什么建议使用static
?具体是什么意思?
谢谢。
编辑:同样的问题适用于方法要求。
答案 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
}// ^^^