我注意到Swift
protocols
中的某些功能具有static
关键字。但是,在实现该函数时,必须删除static
关键字以使编译器满意。
public static func <(lhs: Self, rhs: Self) -> Bool
static
在上下文中的含义及其目的是什么?
答案 0 :(得分:4)
来自Xcode 8 beta 4发行说明:
可以在类型或扩展中定义运算符。对于 例如:
struct Foo: Equatable { let value: Int static func ==(lhs: Foo, rhs: Foo) -> Bool { return lhs.value == rhs.value } }
此类运算符必须声明为
static
(或者,在一个类中,class final
),并且与其全局具有相同的签名 同行。作为此更改的一部分,声明了操作员要求 在协议中也必须明确声明static
:protocol Equatable { static func ==(lhs: Self, rhs: Self) -> Bool }
答案 1 :(得分:1)
静态属性和方法
Swift允许您创建属于某个类型的属性和方法,而不是类型的实例。这有助于通过存储共享数据来有意义地组织数据。
Swift调用这些共享属性&#34;静态属性&#34;,并且只使用static关键字创建一个。完成后,您可以使用该类型的全名来访问该属性。这是一个简单的例子:
struct TaylorFan {
static var favoriteSong = "Shake it Off"
var name: String
var age: Int
}
let fan = TaylorFan(name: "James", age: 25)
print(TaylorFan.favoriteSong)
所以,Taylor Swift粉丝的名字和年龄属于他们,但他们都有同样喜欢的歌。
因为静态方法属于类而不是类的实例,所以您不能使用它来访问类中的任何非静态属性。