【发布时间】:2016-01-17 10:05:08
【问题描述】:
为什么我不能使用 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);
}
}
我收到错误消息:'Type [NSNumber]!没有下标成员'。但是这个:
NSLog("%f", arrayOfNumbers[0]);
编译得很好....
这里发生了什么?
【问题讨论】:
-
这行得通吗?
NSLog("%@", data.arrayOfNumbers[0]) -
@kennytm 奇怪,它确实使用这种方法编译,但是当我立即尝试将它传递给这样的函数时不起作用:
func test(num: Float) { NSLog("%f", num); } test(data.arrayOfNumbers[0])(给出相同的错误) -
你真的需要
Data作为可选吗? -
@vadian 一点也不,这正是 Swift 生成的。
-
请注意
NSLog("%f", arrayOfNumbers[0])编译,因为 (Swift) 编译器不检查变量参数列表的类型。但是,它不会产生正确的输出,因为对象 pointer 被解释为浮点数。
标签: objective-c swift cocoa cocoa-touch