1. 程式人生 > >swift裏 as、as!、as?區別 T.Type與動態類型

swift裏 as、as!、as?區別 T.Type與動態類型

atm cti not init swift where mod ID AS

as

1、編譯器進行類型轉換合法性檢查;靜態

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: shoppingList[indexPath.section], for: indexPath as IndexPath)

let k = cell as IndexPath

Cannot convert value of type ‘UICollectionViewCell‘ to type ‘IndexPath‘ in coercion

2、配合switch:類型探測

as!as?

類型動態轉化;

任意類型轉化為特定類型;類型體系檢查。

類型作為函數參量時,屬於動態類型;

類型系統和編譯器密切相關。

使用類型進行實例初始化時,編譯器要求類型限定必須是靜態的;(相對於函數調用)。

所以作為類型傳入的類型參數,用於給實例初始化時,必須做限定。

(type as! HMLoginModel.Type).init()

extension ObservableType where E == Response {

public func mapModel<T: HandyJSON>(_ type: T.Type) -> Observable<T> {

return flatMap { response -> Observable<T> in

(type as! HMLoginModel.Type).init()

return Observable.just(response.mapModel(T.self))

}

}

}

swift裏 as、as!、as?區別 T.Type與動態類型