Swift开发必备技巧:static和class的使用
来源:互联网 发布:如何申请淘宝网开店 编辑:程序博客网 时间:2024/06/06 18:59
Swift中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是static和class。这两个关键字确实都表达了这个意思,但是在其他一些语言,包括Objective-C中,我们并不会特别地区分类变量/类方法和静态变量/静态函数。但是在Swift中,这两个关键字却是不能用混的。
在非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) } }
enum的情况与这个十分类似,就不再列举了。
class关键字相比起来就明白许多,是专门用在class类型的上下文中的,可以用来修饰类方法以及类的计算属性。要特别注意class中现在是不能出现存储属性的,我们如果写类似这样的代码的话:
class MyClass { class var bar: Bar? }
编译时会得到一个错误:
class variables not yet supported
这主要是因为在Objective-C中就没有类变量这个概念,为了运行时的统一和兼容,暂时不太方便添加这个特性。Apple表示今后将会考虑在某个升级版本中实装class类型的类存储变量,现在的话,我们只能在class中用class关键字声明方法和计算属性。
有一个比较特殊的是protocol。在Swift中class、struct和enum都是可以实现protocol的。那么如果我们想在protocol里定义一个类型域上的方法或者计算属性的话,应该用哪个关键字呢?答案是使用class进行定义,但是在实现时还是按照上面的规则:在class里使用class关键字,而在struct或enum中仍然使用static——虽然在protocol中定义时使用的是class:
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" } }
载自:Swifter
- Swift开发必备技巧:static和class的使用
- Swift开发必备技巧:static和class的使用
- Swift开发必备技巧:static和class的使用
- swift: Swift中static和class的使用
- swift 里的class和static
- Swift开发必备技巧:内存管理、weak和unowned
- Swift开发必备技巧:内存管理、weak和unowned
- 开发员必备的jQuery开发技巧和心得
- Swift开发过程中常用到的一些使用技巧和注意的地方
- ios开发--在Swift中使用JavaScript的方法和技巧
- static和class的问题
- Swift中class func与static func的区别
- 局部static变量 和 成员变量 的使用技巧
- 在Swift中使用JavaScript的方法和技巧
- 在Swift中使用JavaScript的方法和技巧
- 在Swift中使用JavaScript的方法和技巧
- 开发必备的Windows小技巧
- iOS开发技巧系列 使用Swift反射
- 《php和mysql web开发》笔记——第1章PHP快速入门
- 关于数据库一些名词的直观解释记录
- JavaScript高级程序设计之函数表达式之递归第7.1讲笔记
- php count()函数与sizeof()函数之问?
- mysql如何导入excel数据
- Swift开发必备技巧:static和class的使用
- iOS9新特性——3Dtouchaa
- 内存愚见-----Java运行态
- 【案例】因为有你,所以安全!
- 缓慢变化维
- Unity Mathf 数学运算(C#)
- storm 集群部署
- 关于一些数据库名词的解释
- Xcode7.0(7A220) 安装离线文档