Dans le code ci-dessous:modèle Swift correspond à
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
}
}
si
struct Car: Serializable {
var owners: [Serializable]
}
(propriétaires var est défini comme [Serializable]
)
case let value as Array<Serializable>:
reconnaîtront, mais en cas:
struct Car: Serializable {
var owners: [Owner]
}
(propriétaires var est défini comme [Owner]
)
case let value as Array<Serializable>:
ne le reconnaissent pas, même si Owner
est conforme à Serializable
protocole? Quelqu'un peut-il expliquer pourquoi?
J'ai essayé:
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
œuvres, si Swift reconnaît que [Owner]
est [Serializable]
, pourquoi case let value as Array<Serializable>
match de [Serializable]
mais pas [Owner]
?
Avez-vous essayé 'cas Apprécions où la valeur est un tableau'? –
Cela ne fonctionne pas. Fonctionne de la même manière que 'case let value comme Array' –
Quelqu'un a supprimé une réponse. Il a mentionné que ceci ne compilera pas: let arr: [Propriétaire] = [Propriétaire (nom: "John"), Propriétaire (nom: "Mike")]; let arr2 = arr comme? Array ... Erreur: Serializable n'est pas un sous-type de Owner. –