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

來源:互聯網
上載者:User

標籤:elf   bsp   類型轉換   類型   value   執行個體初始化   fun   MLOG   函數調用   

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與動態類型

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.