2015-05-08 6 views
1

Я пытаюсь вызвать метод объектива-С из быстрого. Подпись метода:Передача булевского указателя из 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

Um, и ошибка не 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" 
} 
Смежные вопросы