填平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,200評論 4 61
  • 前幾天,生物小白的同事機緣巧合之下動手提取了自己的唾液DNA,完事后跑來告訴小編,實驗室不是應該和電視、電影里那樣...
    基因科點普閱讀 1,456評論 4 11
  • 誰念西風獨自涼,蕭蕭黃葉閉疏窗,沉思往事立殘陽。被酒莫驚春睡重,賭書消得潑茶香,當時只道是尋常。—— 清 / 納蘭...
    東籬書院閱讀 548評論 3 25
  • 展翅飛鷹翱穹際,江山萬里笑東風。
    霙愔閱讀 230評論 9 5
  • 重疊的畫法和陰影。 選擇了同學們正在畫的等容線,下面放了我的最愛,隨意版的尼澤爾。 感覺打了陰影,立體效果非常明顯...
    卡波閱讀 404評論 4 1