如何将协议实例数组向下转换为AnyObject
s?我在下面的代码示例中尝试了一些更合理的想法。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)
方法签名来自苹果的NSUbiquitousKeyValueStore
类,所以我真的不能重新设计该是类型安全的。
如果一个对象符合AnyObject类型,但其类型更加明确,则不需要将对象强制转换为AnyObject来匹配方法签名。在你的情况 - 正如埃里克在他的回答中提到的 - 问题是'NSUbiquitousKeyValueStore'只支持属性列表兼容类型。 – vadian