准备

swift static和class的区别

2019-05-14  本文已影响11人  彭磊PL

一、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()"
    }
}
上一篇下一篇

猜你喜欢

热点阅读