Swift开发必备技巧:static和class的使用

2017-06-26  本文已影响789人  元哥830

Swift中表示“类型范围作用域”的有两个关键字static和class

在非class的类型上下文中,我们统一使用static来描述类型作用域。这包括enum和struct中表述类型方法和类型属性时。在这两个值类型中,我们可以在类型范围中声明并使用存储属性,计算属性和方法。static适用场景有这些:

struct Point {  
    let x: Double  
    let y: Double  
    // 存储属性  
    static let zero = Point(x: 0, y: 0)  
    // 计算属性  
    static var ones: [Point] {  
        return [Point(x: 1, y: 1),  
                Point(x: -1, y: 1),  
                Point(x: 1, y: -1),  
                Point(x: -1, y: -1)]  
    }  
    // 类方法  
    static func add(p1: Point, p2: Point) -> Point {  
        return Point(x: p1.x + p2.x, y: p1.y + p2.y)  
    }  
} ```
> 注意: class修饰的类中不能使用class来存储属性的

class MyClass {
class var bar: Bar?
}

编译器报错:`class variables not yet supported`

> 有一个比较特殊的是protocol,在Swift中class、struct和enum都是可以实现protocol的,那么如果我们想在protocol里定义一个类型域上的方法或者计算属性的话,应该用哪个关键字呢?答案是使用class进行定义,但是在实现时还是按照上面的规则:在class里使用class关键字,而在struct或enum中仍然使用static——虽然在protocol中定义时使用的是class:

e.g.:
protocol MyProtocol {
class func foo() -> String
}
struct MyStruct: MyProtocol {
static func foo() -> String {
return "MyStruct"
}
}
enum MyEnum: MyProtocol {
static func foo() -> String {
return "MyEnum"
}
}
class MyClass: MyProtocol {
class func foo() -> String {
return "MyClass"
}
}```

上一篇下一篇

猜你喜欢

热点阅读