NSObject类符合NSArray中包含的Swift协议

时间:2015-06-16 08:14:53

标签: swift nsarray protocols swift2 swift-array

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

2 个答案:

答案 0 :(得分:1)

不要试图在Swift中编写Objective-C。离开NSObjectNSArrayNSMutableArray

以下是没有任何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) }
}