以前のバージョンの Xcode 6 および 7 と Swift では、次の構文が機能します。
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 で変更されました。
年: func SecItemCopyMatching(_ query: CFDictionary, _ result: UnsafeMutablePointer<AnyObject?>) -> OSStatus
新着: func SecItemCopyMatching(_ query: CFDictionary!, _ result: UnsafeMutablePointer<Unmanaged<AnyObject>?>) -> OSStatus
...そして、secureItemValue タイプが一致しません。
以前は結果を抽出するメカニズムがわかりにくかったので、新しい宣言で何とか簡単になることを願っていますが、secureItemValue 変数の正しい型を宣言して結果を抽出する方法がわかりません。