В предыдущих версиях Xcode 6 и 7 с Swift, этот синтаксис будет работать:Как вызвать SecItemCopyMatching в Xcode 7 beta 4?
var secureItemValue: Unmanaged<AnyObject>?
let statusCode: OSStatus = SecItemCopyMatching(keychainItemQuery, &secureItemValue)
if statusCode == errSecSuccess
{
let opaquePointer = secureItemValue?.toOpaque()
let secureItemValueData = Unmanaged<NSData>.fromOpaque(opaquePointer!).takeUnretainedValue()
// Use secureItemValueData...
}
Однако заявление SecItemCopyMatching изменилось в Xcode 7 бета 4:
OLD: func SecItemCopyMatching(_ query: CFDictionary, _ result: UnsafeMutablePointer<AnyObject?>) -> OSStatus
NEW : func SecItemCopyMatching(_ query: CFDictionary!, _ result: UnsafeMutablePointer<Unmanaged<AnyObject>?>) -> OSStatus
... и теперь тип secureItemValue не совпадает.
Механизм сбивает с толку прежде, чем извлечь результат, и я надеюсь, что это будет как-то проще с новым объявлением, но я не знаю, как объявить правильный тип для переменной secureItemValue и извлечь результат.
Ницца, @Maximilian. Не понял бы это через миллион лет! – Daniel
Если объект не является обязательным, по умолчанию он равен нулю, поэтому 'var dataTypeRef: AnyObject?' И 'var dataTypeRef: AnyObject? = nil' то же самое – Maximilian
Да Максимилиан, вы правы, я собираюсь удалить свой комментарий. – Neil