Swift开发实战

static 和 class

2015-09-23  本文已影响286人  sprint

在swift中 static和class都是用来表示”类型范围作用域“,但是在oc中并不会特别区分,而在swift中这两个关键字不能混用。

在非class的类型中我们使用static来定义类型作用域,包括enum和struct,我们可以在类型范围内声明并使用存储属性,计算属性和方法,

struct Point {

  let x:Double

  let:y:Double

 static let  zero = Point(x:0,y:0)//存储属性

 static var ones:[Point]  {

    return [zero,Point(x:1,y:1),Point(x:2,y:2)]

 }

 static func add(p1:Point,p2:Point) { 

   return Point(x,p1.x+p2.x,y:p1.y+p2.y);

 }

}

class关键字是专门用在class类型上下文中,可以用来修饰类方法及计算属性,但是不能出现class的存储属性

class MyClass  {

class var name:String? 

}

会得到编译错误 class variables not yet supported

在swift1.2及以后,我们可以在class中使用static来声明一个类作用域的变量:

class MyClass  {

static var name:String?

}

有一个比较特殊的是protocol ,在swift中class struct enum都可以实现protocol, 那么如果在protocol中定义一个类型域上的方法或者计算属性,应该选用哪个关键字呢?答案是static,而在class中 我们既可以使用class也可以使用static,他们是相同的。

class MyClass  {

class func foo(){}

static func bar(){}

}


在swift1.2之前 protocol使用的是class但是这确实是不合理的,swif1.2和2.0分两次对此进行了改进,现在只需要记住,在任何时候使用static都是没问题的。

上一篇 下一篇

猜你喜欢

热点阅读