2014-09-26 40 views
6

以下Swift代碼會重複崩潰編譯器。我錯過了什麼?Swift泛型和相關類型的錯誤

protocol Props { 
    typealias ComponentType: Component<Self> 
} 

class Component<PropsType: Props> { 
} 

class FooProps : Props { 
    typealias ComponentType = FooComponent<FooProps> 
} 

class FooComponent<PropsType: Props> : Component<PropsType> { 

} 
+1

編譯器崩潰總是一個錯誤,無論代碼可能是正確還是錯誤 – newacct 2014-09-26 18:25:39

+0

是的,但這並不意味着我的代碼是正確的(我懷疑它不是) - 如果代碼是錯了,也許正確的代碼不會導致編譯器崩潰。如果代碼是正確的,那麼我需要一個解決該編譯器bug的解決方法 – igul222 2014-09-26 18:51:48

+0

我不知道你的目標是什麼,但是導致崩潰的原因是「typealias ComponentType = FooComponent 」 I don' t認爲它是必須的,因爲如果你在Props中聲明瞭一個簡單的類型別名,比如「typealias T = Int」,你可以使用它作爲嵌套類型的FooProps。 無論如何,我認爲你不能使用「typealias ComponentType = Component 」 嘗試運行這個語句「var ComponentType:FooProps.ComponentType = FooComponent()」,你會看到程序運行到一個不定式循環中。 – ByteArtisan 2014-10-03 11:05:59

回答