为什么建议在Swift协议中使用static作为属性要求的前缀?
在《公约》中,规定: 在协议中定义类型属性要求时,始终使用为什么建议在Swift协议中使用static作为属性要求的前缀?,swift,Swift,在《公约》中,规定: 在协议中定义类型属性要求时,始终使用static关键字作为前缀。即使类型属性要求在由类实现时可以以class或static关键字作为前缀,此规则仍然适用 我不明白你是应该总是这样做,还是只在特定情况下这样做(因为在后面的文档中,static并不总是存在) 为什么建议使用静态?具体是什么意思 多谢各位 编辑:相同的问题适用于方法要求 在后面的文档中,static并不总是存在 本节讨论类型要求,即一致性类型要求具有特定名称和类型的静态属性。换句话说,当你写这篇文章的时候 pro
static
关键字作为前缀。即使类型属性要求在由类实现时可以以class
或static
关键字作为前缀,此规则仍然适用
我不明白你是应该总是这样做,还是只在特定情况下这样做(因为在后面的文档中,static
并不总是存在)
为什么建议使用静态
?具体是什么意思
多谢各位
编辑:相同的问题适用于方法要求
在后面的文档中,static并不总是存在
本节讨论类型要求,即一致性类型要求具有特定名称和类型的静态
属性。换句话说,当你写这篇文章的时候
protocol MyProtocol {
static var myProperty: Int { get set }
}
一致性类必须这样做
class MyClass : MyProtocol {
static var myProperty: Int
}// ^^^^^^
它还可以选择这样做:
class MyClass : MyProtocol {
class var myProperty: Int
}// ^^^^^
但在定义协议时没有这样的选项
如果未使用静态
,如文档后面所述,需求将成为实例需求,而不是类型需求:
protocol MyProtocol3 {
var myProperty3: Int { get }
}// ^^^
class MyClass3 : MyProtocol3 {
let myProperty3 = 42
}// ^^^
现在,该类必须提供一个实例变量:
class MyClass2 : MyProtocol2 {
var myProperty2: Int
}
请注意,在协议中声明实例需求也有类似的限制:始终使用var
,即使实现可能使用let
来满足需求:
protocol MyProtocol3 {
var myProperty3: Int { get }
}// ^^^
class MyClass3 : MyProtocol3 {
let myProperty3 = 42
}// ^^^
您可以在协议中为“类型属性”(即与类型本身相关联的属性,而不是该类型的特定实例)使用
static
。当static
不存在时,它不是类型属性(例如,标准存储属性)。您是否在问为什么要将static
(而不是另一个关键字)用于类型属性?或者你在问我们实例属性和类型属性之间有什么区别?@Rob实际上我知道你应该总是使用static
,但现在我明白了static
的意思。谢谢!我原以为它是说总是使用static
,但现在我明白了其中的区别!非常感谢您的详细回答。