无法从Swift访问桥接的NSArray

时间:2016-01-17 10:05:08

标签: objective-c swift cocoa cocoa-touch

为什么我不能使用Swift的Objective-C NSArray?根据文档:Working with Cocoa Data Types Swift应该将NSArray<Type*>*[Type]联系起来。

我在Objective-C中定义了这个对象:

@interface Data : NSObject
@property (strong, nonatomic, readonly) NSArray<NSNumber*>* arrayOfNumbers;
@end

Objective-C中定义的此方法:

@protocol DataReceiver
- (void)onDataReceived:(Data*)data;
@end

这在Swift中定义:

class MyDataReceiver : DataReceiver {
    func onDataReceived(data: Data!) {
        test(data.arrayOfNumbers[0]);
    }

    func test(num: Float) {
        NSLog("%f", num);
    }
}

我收到错误:'输入[NSNumber]!没有下标成员'。但是这个:

NSLog("%f", arrayOfNumbers[0]);

编译得很好......

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

错误消息没有意义,但这是因为您尝试将NSNumber传递给接受Float的方法。这意味着编译器正在尝试查找将返回Float的下标方法,但显然它无法找到它。

func test(num: NSNumber) {
    NSLog("%@", num);
}

应该解决问题。 Objective-C to Swift桥接按预期工作。