| 特性 | Objective-C | Swift |
|---|---|---|
| 關鍵字 | const / 無 | let (常數) / var (變數) |
| 型別宣告 | 強制 | 可選,支援型別推斷 |
| 範例 | const int c=10; NSString *s=@"str"; | let c=10; var s="str" 或 var s: String = "str" |
Swift 強制初始化,未初始化屬性編譯報錯,除非標記為可選型(?)。
String 型別,無 NSString/NSMutableString 之分;以 + 串接,== 比較內容。// 陣列
var recipes = ["Egg", "Mushroom"] // 型別推斷為 [String]
recipes += ["Thai"] // 陣列合併
recipes[1...3] = ["A", "B", "C"] // 範圍替換
// 字典
var companies = ["AAPL": "Apple", "GOOG": "Google"]
companies["TWTR"] = "Twitter" // 新增/修改
for (code, name) in companies { ... } // 元組解構遍歷
Swift 陣列/字典為值型別(結構體),賦值即複製,保證執行緒安全。
.swift 檔,無 .h/.m 分離。var name: String?)。class Sub: Base, Proto1, Proto2。func greet(name: String) -> Int { print("Hi \(name)"); return 10 }
let obj = MyClass()
obj.greet(name: "Simon") // 呼叫語法統一為 dot + 括號
返回型別用 -> 指示,支援多重返回值(元組)。
for i in 0..<5 半開區間,0...5 閉區間。if 條件無需括號,switch 預設不貫穿,需 fallthrough 才進入下一 case。switch 支援字串、區間、元組、型別匹配等強大模式。let product = (id: "AP234", name: "iPhone", price: 599)
product.name // 具名存取
func getProduct() -> (String, Int, Double) { ... } // 多值返回
var s: String? 表示可能為 nil,非可選型不可賦 nil。nil 則整鏈回傳 nil。可選型將 Objective-C 常見的執行期 nil 崩潰前移至編譯期,大幅提升程式碼健壯性。