Swift 3协议中的静态关键字

时间:2016-08-14 17:18:36

标签: swift static swift3 swift-protocols

我注意到Swift protocols中的某些功能具有static关键字。但是,在实现该函数时,必须删除static关键字以使编译器满意。

public static func <(lhs: Self, rhs: Self) -> Bool

static在上下文中的含义及其目的是什么?

2 个答案:

答案 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粉丝的名字和年龄属于他们,但他们都有同样喜欢的歌。

因为静态方法属于类而不是类的实例,所以您不能使用它来访问类中的任何非静态属性。