天天看點

類型擦除

類型擦除

但是在使用關聯類型的時候需要注意當聲明一個使用了關聯屬性的協定作為屬性時,比如下面的代碼:

class stateDelegate<T> {

    var state: T

    var delegate: HTNState

}

<> {

varvar

先會提示 no initializers 的錯誤,接着會提示 error: protocol ‘HTNState’ can only be used as a generic constraint because it has Self or associated type requirements 。意思是 HTNState 協定隻能作為泛型限制來用,因為它裡面包含必需的 self 或者關聯類型。

那麼該如何處理呢?這裡需要通過類型擦除來解決,主要思路就是加個中間層在代碼中讓這個抽象的類型具體化。實際上在 Swift 的标準庫裡就有類型擦除很好的運用,比如 AnySequence 的協定。

------------------越是喧嚣的世界,越需要甯靜的思考------------------

合抱之木,生于毫末;九層之台,起于壘土;千裡之行,始于足下。

積土成山,風雨興焉;積水成淵,蛟龍生焉;積善成德,而神明自得,聖心備焉。故不積跬步,無以至千裡;不積小流,無以成江海。骐骥一躍,不能十步;驽馬十駕,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇鳝之穴無可寄托者,用心躁也。