以下のコードでは:
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]
}
(所有者変数は次のように定義されます[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]
が動作するので、Swift はそれが[Serializable]
であることを認識しcase let value as Array<Serializable>
ます。[Serializable]
[Owner]