美文网首页
Swift开发必备技巧:static和class的使用

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

作者: 元哥830 | 来源:发表于2017-06-26 10:35 被阅读789次

    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"
    }
    }```

    相关文章

      网友评论

          本文标题:Swift开发必备技巧:static和class的使用

          本文链接:https://www.haomeiwen.com/subject/vfudcxtx.html