下面是一些設置代碼來解釋所發生的事情:無法將類型 '[SomeStruct]' 的值來指定類型 '[SomeProtocol]'
protocol CanJump{
func jump()
}
struct Dog: CanJump{
func jump(){
print("yay jump")
}
}
struct Cat: CanJump{
func jump(){
print("nothx")
}
}
let d = [Dog()]
let c = Cat()
這不起作用:
let thingsThatCanJump: [CanJump] = d
無法將類型的值[狗]指定類型[CanJump]
這並不工作:
let thingsThatCanJump: [CanJump] = [c]
一個噁心的解決辦法,我已經拿出的是:
let thingsThatCanJump: [CanJump] = d.map({$0 as CanJump})
有人可以解釋爲什麼發生這種情況?
我猜這與編譯器有關,不能完全評估類型和一致性。
FYI:讓d = [狗()作爲CanJump]工作A S以及 – LoVo
這是一個事實,即仿製藥在斯威夫特不變的結果。 [查看此問答以獲取更多信息](http://stackoverflow.com/questions/37188580/why-isnt-somestruct-convertible-to-any)。儘管請注意,您只會遇到一個結構數組而不是類的問題。 – Hamish
@ originaluser2:謝謝!這是我正在尋找的答案。 – ciauri