Swift在实际项目中的应用
Swift的应用与Cocoa交互 要用Swift写App首先需要了解的就是UI怎么写、系统功能怎么调用。由于Swift并没有重写系统功能库,只是对Cocoa进行了桥接,所以要调用系统功能就要与Cocoa的交互。Swift与Cocoa交互的细节非常多,但是并没有太大难度,因为Cocoa的使用与用Objective-C开发时没有太大不同,一般来说跟着Xcode的提示走基本都没有问题。需要注意的几点:
多线程 Swift语言本身并没有多线程支持,因此要使用多线程还是要调用NSThread、GCD等:
此外,Object-C中一个很方便的代码互斥方式@synchronized在swift中不支持,因此要实现代码互斥需要自己使用锁。当然也可以模仿@synchronized自定义一个synchronized方法,利用尾部闭包造出原来的感觉:
单例 单例模式是移动开发中常见的一种模式,其一般要求是:
在Object-C中单例通常是用dispatch_once来实现的,在Swift中同样可以这么做。但是由于Swift中支持全局变量、常量的lazy初始化,我们可以简化单例的实现: 通过let定义单例实例常量来保证线程安全,通过全局常量的lazy初始化来保证单例只初始化一次。 ARC Swift中的ARC原理与Object-C中一样,只不过在使用形式上有所不同。Swift中所有引用默认都是强引用,另外加入了两个ARC标记:
由于weak引用在使用过程中可能变为nil,所以weak引用必须是可选类型(Optional)。另外Swift对闭包捕获的变量的标记做了优化:
在Object-C中这种情况需要在闭包之外定义一个weakself,然后闭包捕获weak self。Swift中只需要把weak self写在闭包参数表之前的中括号中即可完成同样功能,这种方式代码结构更清晰,可读性更好。需要注意的是在闭包内self是weak的,是个可选类型,因此使用self时需要解可选。 Delegate 代理模式是开发中很常见的一种模式,它的实现原理与Object-C类似,也是通过协议来确定代理接口,用实现协议的实例来充当代理:
不同的地方在于,Object-C中delegate是id类型的,而swift中协议是一种基本类型,delegate可以直接定义为协议类型,这样能让代理的职责更明确。要注意的地方是delegate是weak的,所以必须使用可选类型,而且weak标记的必须是引用,所以protocol必须打上class标记,表示该协议只能被class实现,这样协议类型才能当做引用类型使用。 自定义操作符 Swift中可以自定义操作符,自定义一个操作符需要两个要素:
比如我们可以定义一个笑脸操作符,他在字符串后面添加一个笑脸(^_^):
函数式编程 在Swift中,函数是first-class,也就是说函数可以作为参数传入也可以作为返回值返回,也可以给变量赋值。函数式编程是一种很强大、很灵活的思想,在Object-C中也有block等函数式编程思想,但并不明显,在Swift中这一点得到了强化。 比如说可以实现一个函数工厂: 泛型编程 Swift中增加了泛型这个概念,泛型是一种很好的代码复用机制,用于将类型不同但实现相同的代码统一起来。泛型在Swift中应用非常广泛,你只要跳转到Swift的库文件就会发现类型、操作符、全局函数的定义中大量应用了泛型,因此不再做详细介绍。这里有一个小例子,利用操作符自定义、函数式和泛型在代码中实现管道机制:
总结Swift有着更严格的类型和更规范的语义,针对容易造成BUG的点进行了优化,又加入了很多不错的语法糖,代码更简洁、更安全。它吸收了大量其他语言的优秀特性,可以实现一些强大灵活的设计模式,但也造成了其语法繁杂的缺点,增加了学习的难度。Swift本身的设计目标是高效、灵巧,但由于需要兼容Cocoa,导致其设计受到牵制,引入了一些有隐患的设计。由于这些特点,编写Swift代码其实很依赖IDE的辅助,但目前为止xcode的表现还不稳定,经常提示错误,再加上几乎每次xcode更新都伴随着Swift语法修改,Swift想要广泛应用于实际工程还有一段路要走,而Swift2.0的发布和Swift开源化,无疑将加快这个进程。 参考书籍
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |