swift裏 as、as!、as?區別 T.Type與動態類型
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與動態類型