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。远离 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
}
如果您想确保您的 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
}
我想在 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。远离 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
}
如果您想确保您的 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
}