[英]CFDictionaryGetValue can't invoke with CFStringRef
我正在嘗試實現CFDictionaryGetValue(), 如此appledoc列表3中所示:
server = CFDictionaryGetValue(credentialDict, kSecAttrServer);
userName = CFDictionaryGetValue(credentialDict, kSecAttrAccount);
password = CFDictionaryGetValue(credentialDict, kSecSharedPassword);
我這樣實施了
let userName = CFDictionaryGetValue(credentialDict, kSecAttrAccount)
let password = CFDictionaryGetValue(credentialDict, kSecSharedPassword)
但我得到錯誤“無法調用”CFDictionaryGetValue“與類型的參數列表”(CFDictionaryRef,CFStringRef)“
我不明白這與蘋果doc如何實現它有何不同。
謝謝
是的,有在雷達提到代碼的問題在這里
我找到了一個解決方法:
let unsafeCred = CFArrayGetValueAtIndex(credentials, 0)
let credential: CFDictionaryRef = unsafeBitCast(unsafeCred, CFDictionaryRef.self)
let dict: Dictionary<String, String> = credential as! Dictionary<String, String>
let username = dict[kSecAttrAccount as String]
let password = dict[kSecSharedPassword.takeRetainedValue() as! String]
UPDATE
SecRequestSharedWebCredential("www.reddit.com", .None) {
credentials, error in
if CFArrayGetCount(credentials) > 0 {
let dict = unsafeBitCast(
CFArrayGetValueAtIndex(credentials, 0),
CFDictionaryRef.self) as Dictionary
let username = dict[kSecAttrAccount as String]
let password = dict[kSecSharedPassword as String]
login(username, password)
}
}
請注意這里的區別:
iOS8上
var kSecSharedPassword: Unmanaged<AnyObject>!
func SecRequestSharedWebCredential(_ fqdn: CFString!,
_ account: CFString!,
_ completionHandler: ((CFArray!,
CFError!) -> Void)!)
iOS9
let kSecSharedPassword: CFString
func SecRequestSharedWebCredential(_ fqdn: CFString?,
_ account: CFString?,
_ completionHandler: (CFArray?, CFError?) -> Void)
以下是swift2 / iOS9 / xcode7的所有更改
更新了XCode 7.3和Swift 2.2的答案
if CFArrayGetCount(credentials) > 0 {
let dict = unsafeBitCast(CFArrayGetValueAtIndex(credentials, 0), CFDictionaryRef.self) as NSDictionary
let username = dict[kSecAttrAccount as String] as! String
let password = dict[kSecSharedPassword as String] as! String
dispatch_async(dispatch_get_main_queue()) {
completion(error: nil, username: username, password: password)
}
請記住在返回用戶名和密碼的值時要小心,因為它必須在主線程上
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.