Swift 2.2 - 使用基本协议的类型转换失败的泛型

时间:2016-05-09 21:45:24

标签: swift generics casting protocols swift2.2

有些事让我很烦恼。 这是我在Playground得到的:

protocol BaseProtocol{}
extension Dictionary : BaseProtocol{}
extension String : BaseProtocol{}

let A : [String:BaseProtocol?] = [
    "A" : "ABC",
    "B" : nil ,
    "C" : "C1"
]

//Direct Cast
let D = A as? [String:String?]  //OK

//'Indirect' Cast
let B : BaseProtocol = A
let C = B as? [String:String?] //Fail -> C == nil

//Two Steps Cast
let E = B as? [String:BaseProtocol?]
let F = E as? [String:String?] //OK

所以,这是我的问题。存储在B中的值是有效的[String:String?]值。为什么转换为变量C会失败?

这是该语言的理想行为吗?或者它正在开发中的东西'?

更具体我的情况。我扩展了Dictionary和Array,我知道我有一个BaseProtocol值(比如变量B),需要将它转换为Element(Array)或Value(Dictionary)并附加它。 但是,即使该值实际上对于变量C实例化显示有效,该演员也会失败。

非常感谢任何帮助或见解。

  

编辑:"泛型"这种情况是在Playground中使用的词典

0 个答案:

没有答案