我转换了这个Objective-C函数:
- (NSArray *)grt_map:(id (^)(id))block {
NSMutableArray *newArray = [NSMutableArray array];
[self enumerateObjectsUsingBlock:^(id item, NSUInteger index, BOOL *stop) {
id obj = block(item);
if (obj) {
[newArray addObject:obj];
}
}];
return newArray;
}
...进入斯威夫特:
public func grt_map(block:((Any) -> Any)) -> NSArray {
let array = NSMutableArray()
self.enumerateObjects ({ (item:Any, index:Int, stop: UnsafeMutablePointer<ObjCBool>)->Void in
if (block(item) != nil) {
array.add(item)
}
})
return array;
}
但是我收到了一个错误:
来自'(NSNumber) - &gt; NSNumber'与无关类型'(任意) - &gt;任何'总是失败
我该如何解决?
答案 0 :(得分:0)
如果是nsarray的make扩展,你应该记住它需要可以转换为objc类型的对象。 改变这个:
public func grt_map(block:((Any) -> Any)) -> NSArray
对此:
public func grt_map(block:((AnyObject?) -> AnyObject? )) -> NSArray
对于使用Any,扩展名应该是Array,而不是NSArray
<强>更新强> 测试如下: array.grt_map(块:{(item:AnyObject?)in ...}