W poprzednich wersjach Xcode 6 i 7 z Swift, składnia ta będzie działać:Jak wywołać SecItemCopyMatching w 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...
}
Jednak deklaracja SecItemCopyMatching zmieniło się w Xcode 7 beta 4:
OLD: func SecItemCopyMatching(_ query: CFDictionary, _ result: UnsafeMutablePointer<AnyObject?>) -> OSStatus
NEW : func SecItemCopyMatching(_ query: CFDictionary!, _ result: UnsafeMutablePointer<Unmanaged<AnyObject>?>) -> OSStatus
... a teraz typ secureItemValue nie pasuje.
Mechanizm był mylący przed wyodrębnieniem wyniku i mam nadzieję, że jest to łatwiejsze dzięki nowej deklaracji, ale nie wiem, jak zadeklarować poprawny typ zmiennej secureItemValue i wyodrębnić wynik.
Nicea, @Maximilian. Nie wymyśliłbym tego przez milion lat! – Daniel
Jeśli obiekt jest opcjonalny, jego wartość domyślna to nil, więc 'var dataTypeRef: AnyObject?' I 'var dataTypeRef: AnyObject? = nil' są dokładnie takie same – Maximilian
Tak Maximilian masz rację, mam zamiar usunąć mój komentarz. – Neil