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

NSObject class conforms to protocol contained in NSArray with Swift

我想在 Swift 中创建一个方法,return 是一个符合协议的 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 是一个协议。我收到的错误是 return 语句中的强制转换将始终失败。
我想告诉编译器我有一个 NSObject 类型的对象数组,所有元素都符合 Manager 协议。

您的 return 类型是具有键 NSObject 和值类型管理器的字典,而不是数组。将 return 类型更改为 [Manager]。你也可能想使用数组的 map 函数:

func createManagers() -> [Manager] {
    return classes.map { doSomethingAndTransformIntoManager([=10=]) }
}

不要试图在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
}

如果您想确保您的 return 类型是 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
}