填平macOS和iOS之间的鸿沟 - Swift篇

tags:开发随笔

上次写了一篇填平macOS和iOS之间的鸿沟,总结了在macOS和iOS之间共享代码的设计和实现,是基于Objective-C 的。

自从Swift诞生之后,关于Objective-C和Swift之间优劣对比的讨论就从没间断。

其实两种语言我都在用。Objective-C用的多一些,Swift稍微少一些。刚从XCode6.x 升级到XCode 7.X的时候,曾经为Swift编译后的超大的体积严重的郁闷了一阵子,还愤愤的把MarkNote中原先用Swift写的一部分代码完全用Objective-C重新实现了一遍。

不过新的应用,我基本上都是选择用Swift直接写了。从之前的事情之后,不太喜欢混编了。要么用OC,要么用Swift。

Swift编译技术一直在改进,不过依然有不少问题。包括编译慢等等。更重要的一个原因是,在一个工程中用两种语言写代码,一会OC,一会Swift,对大脑的刺激也是很大的,说不定会增加精神分裂的可能性呢,呵呵。

最近又在做一个既有mac端又有iOS端的应用。于是,老问题又来了,如何用Swift写即支持macOS,又支持iOS的代码?

我的策略还是类似的:

  • 使用Preprocessor directives来做判断OS;
  • 使用typealias来区分引用Cocoa或者UIKit中的类;

说起来比较抽象,还是看代码吧。

比如,我写了一个NSColor的extension:

import Foundation
import Cocoa
extension NSColor {
    class func colorWithHex(
//实现略

现在要让它同时也支持UIColor,那么代码是这样的:

import Foundation
#if os(OSX)
    import Cocoa
    typealias BaseColor = NSColor
#elseif os(iOS)
    import UIKit
    typealias BaseColor = UIColor
#endif
extension BaseColor {
    class func colorWithHex(
//实现略

经过简单的处理,一个同时支持macOS和iOS的Color 扩展就成功了。如此类推,可以让代码在两个平台之间最大限度的复用。

是不是很简单呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,232评论 4 61
  • 前几天,生物小白的同事机缘巧合之下动手提取了自己的唾液DNA,完事后跑来告诉小编,实验室不是应该和电视、电影里那样...
    基因科点普阅读 1,465评论 4 11
  • 谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。—— 清 / 纳兰...
    东篱书院阅读 553评论 3 25
  • 展翅飞鹰翱穹际,江山万里笑东风。
    霙愔阅读 230评论 9 5
  • 重叠的画法和阴影。 选择了同学们正在画的等容线,下面放了我的最爱,随意版的尼泽尔。 感觉打了阴影,立体效果非常明显...
    卡波阅读 406评论 4 1