在下面的代碼:夫特圖案匹配
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]
}
(所有者變量被定義爲[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
作品,讓斯威夫特承認[Owner]
爲[Serializable]
,爲什麼case let value as Array<Serializable>
比賽[Serializable]
但不[Owner]
?
您是否嘗試過'的情況下,讓值,其中值是數組<序列化>'? –
它不起作用。與'case let value as Array相同' –
有人刪除了回覆。他提到這不會編譯:let arr:[Owner] = [Owner(name:「John」),Owner(名稱:「Mike」)];讓arr2 = arr as? Array ...錯誤:Serializable不是Owner的子類型。 –