2016-01-17 51 views
0

爲什麼我無法使用Swift的Objective-C NSArray?根據文件:Working with Cocoa Data Types斯威夫特應該橋接NSArray<Type*>*[Type]無法從Swift訪問橋接的NSArray

我有在Objective-C所定義的本對象:

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

此方法在Objective-C定義爲:

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

而在夫特此定義:

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

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

而我收到錯誤:輸入[NSNumber]!沒有下標成員「。但這:

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

編譯就好了....

這裏發生了什麼?

+1

這是行不通的? 'NSLog(「%@」,data.arrayOfNumbers [0])' – kennytm

+0

@kennytm奇怪的是,它使用這種方法進行編譯,但是當我立即嘗試將它傳遞給像這樣的函數時不起作用:'func test num:Float){NSLog(「%f」,num); } test(data.arrayOfNumbers [0])'(給出相同的錯誤) – UnTraDe

+0

你真的需要'Data'作爲可選項嗎? – vadian

回答

2

錯誤消息沒有意義,但它是由於您試圖將NSNumber傳遞給接受Float的方法所致。這意味着編譯器試圖找到一個下標方法,它會返回一個Float,但顯然它找不到它。

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

應該解決問題。 Objective-C與Swift橋接工程按預期工作。

+0

這很有道理,我想錯誤信息對我來說有點不清楚。謝謝! – UnTraDe