美文网首页准备
swift static和class的区别

swift static和class的区别

作者: 彭磊PL | 来源:发表于2019-05-14 11:13 被阅读11次

    一、static和class

    在Swift中static和class都表示“类型范围作用域”的关键字。在所有类型中(class、static、enum)中,我们可以使用static来描述类型作用域。class是专门用于修饰class类型的。

    1.static可以修饰属性和方法

    
    class Person {
        // 存储属性
        static let age: Int = 20
     
        // 计算属性
        static var wotkTime: Int {
             return 8
        }
        // 类方法
        static func sleep() {
            print("sleep")
        }
    }
    

    但是所修饰的属性和方法不能够呗重写,也就是说static修饰的类方法和属性包含了final关键字的特性,重写会报错

    2.class修饰方法和计算属性

    我们同样可以使用class修饰方法和计算属性,但是不能够修饰存储属性。
    类方法和计算属性是可以被重写的,可以使用class关键字也可以是static

    二、static和Protocol

    swift中的class,struct,enum都可以实现某个指定的协议。如果我们想在Protocol中定义一个类型作用域上的方法或者计算属性,应该使用哪个关键字?答案显而易见,肯定是static,因为static是通用的。注意:在使用Protocol的时候,在enum和struct中仍然使用static进行修饰,在class中,class和static都可以使用。

    
    protocol MyProtocol {
        static 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 中可以使用 class
        class func foo() -> String {
            return "MyClass.foo()"
        }
     
        // 也可以使用 static
        static func bar() -> String {
            return "MyClass.bar()"
        }
    }
    

    相关文章

      网友评论

        本文标题:swift static和class的区别

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