tags:開發(fā)隨筆
上次寫了一篇填平macOS和iOS之間的鴻溝菩貌,總結(jié)了在macOS和iOS之間共享代碼的設(shè)計(jì)和實(shí)現(xiàn)司澎,是基于Objective-C 的欺缘。
自從Swift誕生之后,關(guān)于Objective-C和Swift之間優(yōu)劣對比的討論就從沒間斷挤安。
其實(shí)兩種語言我都在用浪南。Objective-C用的多一些,Swift稍微少一些漱受。剛從XCode6.x 升級到XCode 7.X的時(shí)候络凿,曾經(jīng)為Swift編譯后的超大的體積嚴(yán)重的郁悶了一陣子骡送,還憤憤的把MarkNote中原先用Swift寫的一部分代碼完全用Objective-C重新實(shí)現(xiàn)了一遍。
不過新的應(yīng)用絮记,我基本上都是選擇用Swift直接寫了摔踱。從之前的事情之后,不太喜歡混編了怨愤。要么用OC派敷,要么用Swift。
Swift編譯技術(shù)一直在改進(jìn)撰洗,不過依然有不少問題篮愉。包括編譯慢等等。更重要的一個(gè)原因是差导,在一個(gè)工程中用兩種語言寫代碼试躏,一會OC,一會Swift设褐,對大腦的刺激也是很大的颠蕴,說不定會增加精神分裂的可能性呢,呵呵助析。
最近又在做一個(gè)既有mac端又有iOS端的應(yīng)用犀被。于是,老問題又來了外冀,如何用Swift寫即支持macOS寡键,又支持iOS的代碼?
我的策略還是類似的:
- 使用Preprocessor directives來做判斷OS;
- 使用typealias來區(qū)分引用Cocoa或者UIKit中的類雪隧;
說起來比較抽象西轩,還是看代碼吧。
比如膀跌,我寫了一個(gè)NSColor的extension:
import Foundation
import Cocoa
extension NSColor {
class func colorWithHex(
//實(shí)現(xiàn)略
現(xiàn)在要讓它同時(shí)也支持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(
//實(shí)現(xiàn)略
經(jīng)過簡單的處理固灵,一個(gè)同時(shí)支持macOS和iOS的Color 擴(kuò)展就成功了捅伤。如此類推,可以讓代碼在兩個(gè)平臺之間最大限度的復(fù)用巫玻。
是不是很簡單呢?