2015-07-06 2 views
2

То, что я пытаюсь сделать, это изменить значение структуры C, что у меня есть ссылка нравится так:Установка значения для свойства в ссылочной C структуру в Swift

В BridgingHeader.h:

struct info_type { 
    int priority; 
}; 

в ViewController.swift:

class MyClass { 
    func viewDidLoad() { 
     var info = info_type() 
     info.priority = 2  
     processInfo(&info) 
    } 

    func processInfo(infoRef: UnsafePointer<info_type>) { 
     info.memory.priority = 1 
    } 
} 

Однако код вызывает "Сбой команды из-за сигнала: Прервать ловушки: 6" в Xcode. Открытие выходных сборок я вижу

Assertion failed: (GetSetInfo.getInt().hasValue()), function getSetterAccessibility, file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-700.0.42.3/src/swift/include/swift/AST/Decl.h, line 4070. 
0 swift     0x0000000106d17b9b llvm::sys::PrintStackTrace(__sFILE*) + 43 
1 swift     0x0000000106d182db SignalHandler(int) + 379 
2 libsystem_platform.dylib 0x00007fff8eaacf1a _sigtramp + 26 
3 libsystem_platform.dylib 0x00007fff5aee4bec _sigtramp + 3426974956 
4 libsystem_c.dylib  0x00007fff8ef73b53 abort + 129 
[...] 

Я делаю что-то не так или я наткнуться на Xcode ошибке? Я использую Xcode 7.0 Beta 2 (7.0 бета-версии (7A121l))

ответ

2

Поскольку метод processInfo()модифицирует память указывал на от infoRef, то параметр должен быть объявлен как изменяемые указателя:

func processInfo(infoRef: UnsafeMutablePointer<info_type>) { 
    infoRef.memory.priority = 1 
} 

Это компилируется и работает должным образом.

Xcode 6.4 выдает соответствующее сообщение об ошибке для вашего кода:

func processInfo(infoRef: UnsafePointer<info_type>) { 
    infoRef.memory.priority = 1 // error: cannot assign to the result of this expression 
} 

но Xcode 7 бета 2 аварии, которая является ошибкой.

Смежные вопросы