0

我想在 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 协议。

4

2 回答 2

1

不要尝试在 Swift 中编写 Objective-C。远离和。NSObject_NSArrayNSMutableArray

这是没有任何 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
}
于 2015-06-17T16:15:33.393 回答
0

您的返回类型是具有键 NSObject 和值类型 Manager 的 Dictionary,而不是数组。将返回类型更改为[Manager]. 你也可能想使用map数组的功能:

func createManagers() -> [Manager] {
    return classes.map { doSomethingAndTransformIntoManager($0) }
}
于 2015-06-16T08:21:42.793 回答