Swift基礎(九)id相容性與nil物件
// id相容性
// Swift語言將Objective-C中的id物件匯入為AnyObject型別,表示任意型別的物件。AnyObject協議允許編寫安全型別的程式碼,同事位置無型別物件的靈活性。因為AnyObject協議保證了這種安全。
// 跟id一樣,你可以為AnyObject型別的物件分配任何其他型別的物件,你也同樣可以為它重新分配其他型別的物件。
var myObject: AnyObject = UITableViewCell() // 賦值UITableViewCell型別
myObject = NSDate() // 重新賦值NSDate型別
// 在呼叫Objective-C方法或者訪問屬性時不將它轉換為具體類的型別,包括Objective-C中標記為@objc的方法
let futureDate = myObject.dateByAddingTimeInterval(10)
let timeSinceNow = myObject.timeIntervalSinceNow;
// 因為直到執行時才知道AnyObject的物件型別,所以有可能在不經意間寫出不安全程式碼。另外,與Objective-C不同的是,如果呼叫方法或者訪問的屬性AnyObject物件沒有宣告,將會報執行時錯誤。比如下面的程式碼在執行時將會報出一個unresolved identigier錯誤
myObject.characterAtIndex(5);
// nil物件
// Objective-C中使用nil來表示引用一個空物件(null),指向不存在物件的指標。Swift中所有的值都不會為nil。,Swift裡nil不是指標,它表示特定型別的值不存在。如果需要表示一個缺失的值,可以使用Optional。