Wie Sie ein Array von Protokoll-Instanzen in AnyObject
s downcast? Ich habe einige der sinnvolleren Ideen im folgenden Codebeispiel ausprobiert.Swift AnyObject - Down-Casting eines Arrays von Protokollen zu [AnyObject]
protocol Nameable : class {
var name: String { get }
}
class Person: Nameable {
var name: String
init(name: String)
{
self.name = name
}
}
class Example {
func setArray(array: [AnyObject]?, forKey: String)
{
print("hello world")
}
}
var personOne = Person(name: "Evan")
var personTwo = Person(name: "Brian")
var array: [ Nameable ] = [ personOne, personTwo ]
var anotherArray = array.map({ $0 as AnyObject }) // OMG gross!
var yetAnotherArray = array as [ AnyObject ] // Nope.
var evenYetAnotherArray = array as? [ AnyObject ] // Nope.
var omgThisIsAnArray = Array<AnyObject>(array) // Ha ha, srsly. Nope.
var myExample = Example()
myExample.setArray(anotherArray, forKey: "Named")
Für das, was es wert ist, kommt setArray(_ anArray: [AnyObject]?, forKey aKey: String)
Methodensignatur von NSUbiquitousKeyValueStore
Klasse von Apple, so kann ich nicht wirklich neu gestalten Art sicher zu sein.
Wenn ein Objekt "AnyObject" entspricht, aber sein Typ ist ausgeprägter, muss das Objekt nicht in "AnyObject" umgewandelt werden, um einer Methodensignatur zu entsprechen. In Ihrem Fall - wie Eric in seiner Antwort erwähnt - besteht das Problem darin, dass "NSUbiquitousKeyValueStore" nur Typen unterstützt, die mit der Eigenschaftsliste kompatibel sind. – vadian