你如何将协议实例的数组向下转换为
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
以匹配方法签名。在你的情况下 - 正如Eric在他的答案中提到的那样 - 问题在于NSUbiquitousKeyValueStore
仅支持属性列表兼容类型。 - vadian