一、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()"
}
}
网友评论