无法转换类型' [SomeStruct]'指定类型' [SomeProtocol]'

时间:2016-05-13 08:59:58

标签: ios swift

以下是一些设置代码,用于解释发生的情况:

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})

有人可以解释为什么会这样吗?

我猜测这与编译器没有完全评估类型和一致性有关。

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为viewpager.setPageMargin(some width); 实际上是[Dog]的类型,而swift对类型安全非常严格。

此修复此问题,您可以执行以下操作:

let d

希望这有帮助

答案 1 :(得分:0)

事实证明@ originaluser2已经回答了这个问题。你可以在这里看到他们的详细解释:

Why isn't [SomeStruct] convertible to [Any]?