来自'(NSNumber) - > NSNumber'与无关类型'(任意) - >任何'总是失败

时间:2017-11-23 18:01:26

标签: objective-c swift

我转换了这个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;任何'总是失败

我该如何解决?

1 个答案:

答案 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 ...}