以下是一些设置代码,用于解释发生的情况:
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
无法将[Dog]类型的值转换为指定类型[CanJump]
这确实有效:
let thingsThatCanJump: [CanJump] = [c]
我提出的令人厌恶的解决方法是:
let thingsThatCanJump: [CanJump] = d.map({$0 as CanJump})
有人可以解释为什么会这样吗?
我猜测这与编译器没有完全评估类型和一致性有关。
答案 0 :(得分:1)
这种情况正在发生,因为viewpager.setPageMargin(some width);
实际上是[Dog]的类型,而swift对类型安全非常严格。
此修复此问题,您可以执行以下操作:
let d
希望这有帮助
答案 1 :(得分:0)
事实证明@ originaluser2已经回答了这个问题。你可以在这里看到他们的详细解释: