为什么建议在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
,但现在我明白了其中的区别!非常感谢您的详细回答。