我想在Swift中创建一个方法,该方法返回符合协议的NSObject对象数组。 我尝试过这样的事情:
func createManagers() -> [Manager] {
let result = NSMutableArray(capacity: self.classes.count)
(self.classes as NSArray).enumerateObjectsUsingBlock { (object: AnyObject!, idx: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// TODO: do something and fill the result array
}
return result as NSArray as! [Manager]
}
如你所见, Manager
是一个协议。我收到的错误是返回语句中的演员总是会失败
我想告诉编译器我有一个NSObject类型的对象数组,所有元素都符合Manager协议。
答案 0 :(得分:1)
不要试图在Swift中编写Objective-C。离开NSObject
,NSArray
和NSMutableArray
。
以下是没有任何Objective-C类型的代码:
func createManagers() -> [Manager] {
let result = [Manager]()
for (index, aClass) in classes.enumerate() {
// TODO: do something and fill the result array
}
return result
}
如果您想确保您的返回类型是NSObject
的子类:
func createManagers<T: NSObject where T: Manager>() -> [T] {
var result = [T]()
for (index, aClass) in classes.enumerate() {
// TODO: do something and fill the result array
}
return result
}
答案 1 :(得分:0)
您的返回类型是具有键NSObject和值类型Manager的Dictionary,而不是数组。将返回类型更改为[Manager]
。您可能还想使用数组的map
函数:
func createManagers() -> [Manager] {
return classes.map { doSomethingAndTransformIntoManager($0) }
}