prettyprint
2017年12月22日 星期五
開發iPhone App, 選擇 Swift 或 Objective-C?
Swift 語言優於 Objective-C,這爭議由Simon Ng 知名作家的"iOS 10 App 程式設計實力超進化實戰攻略“一書的範例可看出:
Objective-C
const int count = 10;
double price = 23.55;
NSString *firstMessage = @"Swift is awesome.";
NSString *secondMessage = @"What to you think?";
NSString *message = [NSString stringWithFormat:@"%@%@",firstMessage, secondMessage];
NSLog(@"%@",message);
Swift
let count = 10
var price = 23.55
let firstMessage = "Swift is awesome."
let secondMessage = "What to you think?"
let message = firstMessage + secondMessage
print(message)
哇!Swift 在語法Syntax上的表達簡潔而有力!
首先,每行程式 (Statement) 的結尾: Swift 不用分號(; semicolon) 來作為每行程式的結尾。這是 C/C++/C#/Java 慣用的寫法。
第二:常數與變數的宣告。在Swift的常數以 let 宣告,而變數則以 var 宣告。這點與 Objective-C 在常數宣告必須特別指定用 const 並無法說俗優俗劣。但,Swift 的常數或變數不需要特別定義其資料型態 (Data Type),而是Swift 可以根據其指定的值來推論 (Infer) count 是整數型態,而 price 是 double 資料型態。
當然 ,Swift 宣告整數或變數時,也可定義其 Data Type。例如:
let count : Int = 10
var price : Double = 23.55
第三:字串的宣告簡潔。Swift 在字串(String)的宣告是直覺式的,僅以 firstMessage = "Swift is awesome." 表達。但,Objective-C 卻需用很繞口的符號來完成一件事。例如:
NSString *firstMessage = @"Swift is awesome.";
在字串前面用 * 符號 (*firstMessage) 對初學者而言會問:這是什麼玩意啊?殊不知這是 C 語言的餘孽。在 C 裏頭,符號 * 代表指針(pointer),所以 firstMessage 儲存的是指向 "Swift is awesome." 這一串值的位置。
讀到此,是不是有點頭痛?學 C 的功力好壞就看 Pointer 是否運用自如得體!
第四:字串的串接 (Concat) 上,Swift 是大大優於 Objective-C。後者對初學者而言看似用了奇怪的語法。2 個字串的串接在直覺上不是“第一個字串” 串接 (concat) "第二個字串“就好了嗎?至於串接(concat)這指令是用加號(+)或是其他符號都可。
字串的操作(插入/刪除/修改某字元/字串)在 Objective-C 較為複雜。被宣告為 NSString 的字串是常數字串,不能變更,必須透過 NSMutableString 宣告為變數字串才行。對 Swift 而言就沒有這麼麻煩,字串是否為常數或變數只是由 let 或 var 的宣告定義。
最後,在字串的顯示上,Objective-C 需定義顯示字串的格式 (print format),而 Swift 則由其編譯器去推論判斷。
結論:
Swift 的簡潔語法可大大增加程式的開發速度,同時在程式碼維護的易讀 (Readable) 也有加分的作用。用 Swift 編譯出的執行檔 executable code,根據官方說法,其執行效能又優於 Objective-C。Swift 這種種的優點讓程式開發者不心動也難 ?!
/end
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言