どのようにプロトコルインスタンスの配列をAnyObject
にダウンキャストしますか?私は以下のコード例でより合理的なアイディアのいくつかを試しました。何が価値があるためにSwift AnyObject - プロトコルの配列を[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")
、setArray(_ anArray: [AnyObject]?, forKey aKey: String)
メソッドのシグネチャは、AppleのNSUbiquitousKeyValueStore
クラスから来ているので、私は本当にそれが安全なタイプであることを再設計することはできません。これは本当にない
var array: [Nameable] = [personOne, personTwo]
let array2 = array as [AnyObject] // ✓
オブジェクトが 'AnyObject'に準拠しているがその型がより明確な場合、メソッドのシグネチャに一致するようにオブジェクトを' AnyObject'にキャストする必要はありません。あなたの答えでは、エリックが答えているように、問題は 'NSUbiquitousKeyValueStore'がプロパティリストに準拠した型だけをサポートしていることです。 – vadian