在下面的代码中:
protocol Serializable {
}
struct Owner: Serializable {
var name: String
}
struct Car: Serializable {
var owners: [Serializable]
}
let car = Car(owners: [Owner(name: "John"), Owner(name: "Mike")])
Mirror(reflecting: car).children.forEach {
switch $0.value {
case let value as Array<Serializable>:
print("Recognized!")
default: break
}
}
如果在
struct Car: Serializable {
var owners: [Serializable]
}
(所有者 var 定义为[Serializable]
)
case let value as Array<Serializable>:
会识别它,但以防万一:
struct Car: Serializable {
var owners: [Owner]
}
(所有者 var 定义为[Owner]
)
case let value as Array<Serializable>:
不会识别它,虽然Owner
符合Serializable
协议?有人可以解释为什么吗?
我试过了:
extension Array where Element: Serializable {
var representation: AnyObject {
return self.map { element in return "String" }
}
}
let arr: [Owner] = [Owner(name: "John"), Owner(name: "Mike")]
arr.representation
有效,所以 Swift 认识到[Owner]
,[Serializable]
为什么case let value as Array<Serializable>
匹配[Serializable]
但不匹配[Owner]
?