2015-05-08 34 views
1

我想從swift調用一個Objective-C方法。方法簽名是:從Swift傳遞布爾指針

-(BOOL)getPassThroughSync:(BOOL *)enabled error:(NSError **)error; 

我還沒有能夠傳入一個布爾指針。這是我到目前爲止:

var passThrough: Bool? 
    if scanner.getPassThroughSync(&passThrough, error: nil) { 
} 

由於參數列表無效,因此無法編譯。

同樣,我想打電話給

-(BOOL)getUSBChargeCurrent:(int *)current error:(NSError **)error; 

需要一個int指針。

我錯過了什麼?

+0

庵,與錯誤不是一個NSError **。另外,BOOL與Bool相同(我不使用Swift)? – jarmod

+0

我認爲你需要定義你的意思是「相同的」。從概念上講,是的,但我沒有資格描述語言實施方面的差異。 –

回答

0

我認爲你正在尋找的答案是指針部分this Apple document。基本上,你必須聲明一個指針類型:Type *映射到UnsafeMutablePointer<Type>

要訪問存儲在指針中的值,請使用其屬性memory

有關UnsafeMutablePointer的更多詳細信息,請參見this document

+0

我試過聲明'var passThrough:UnsafeMutablePointer '但編譯器仍然抱怨。 –

+0

'passThrough.memory',我相信...有關詳細信息,請參見[本文檔](http://swiftdoc.org/type/UnsafeMutablePointer/)。 – wltrup

+0

我認爲你需要將'passThrough'定義爲一個不安全的可變指針,指向_optional_ boolean,'var passThrough:UnsafeMutablePointer '。我可能錯了;我目前無法測試我的任何建議。 – wltrup

4

最終,來自於其他答案的評論幫助,下面的工作:

var passThrough: ObjCBool = false 
if scanner.getPassThroughSync(&passThrough, error: nil) { 
    cell.detailTextLabel?.text = passThrough ? "Yes" : "No" 
} 

同樣,

var current: Int32 = 0 
if scanner.getUSBChargeCurrent(&current, error: nil) { 
    cell.detailTextLabel?.text = String(current) + "mA" 
}