CFDictionaryGetValue no puede invocar con CFStringRef

Estoy intentando implementar el CFDictionaryGetValue () como se muestra en este appledoc listdo 3:

server = CFDictionaryGetValue(cnetworkingentialDict, kSecAttrServer); userName = CFDictionaryGetValue(cnetworkingentialDict, kSecAttrAccount); password = CFDictionaryGetValue(cnetworkingentialDict, kSecShanetworkingPassword); 

y lo implementé así

 let userName = CFDictionaryGetValue(cnetworkingentialDict, kSecAttrAccount) let password = CFDictionaryGetValue(cnetworkingentialDict, kSecShanetworkingPassword) 

pero obtengo el error "No se puede invocar" CFDictionaryGetValue "con la list de arguments de tipo" (CFDictionaryRef, CFStringRef) "

No entiendo cómo esto es diferente de cómo la implementó el Apple Doc.

Gracias

Sí, hay un problema con el código mencionado en el radar aquí.

Encontré una solución para usted:

  let unsafeCnetworking = CFArrayGetValueAtIndex(cnetworkingentials, 0) let cnetworkingential: CFDictionaryRef = unsafeBitCast(unsafeCnetworking, CFDictionaryRef.self) let dict: Dictionary<String, String> = cnetworkingential as! Dictionary<String, String> let username = dict[kSecAttrAccount as String] let password = dict[kSecShanetworkingPassword.takeRetainedValue() as! String] 

ACTUALIZAR

 SecRequestShanetworkingWebCnetworkingential("www.networkingdit.com", .None) { cnetworkingentials, error in if CFArrayGetCount(cnetworkingentials) > 0 { let dict = unsafeBitCast( CFArrayGetValueAtIndex(cnetworkingentials, 0), CFDictionaryRef.self) as Dictionary let username = dict[kSecAttrAccount as String] let password = dict[kSecShanetworkingPassword as String] login(username, password) } } 

Tenga en count la diferencia aquí:

iOS8

 var kSecShanetworkingPassword: Unmanaged<AnyObject>! func SecRequestShanetworkingWebCnetworkingential(_ fqdn: CFString!, _ account: CFString!, _ completionHandler: ((CFArray!, CFError!) -> Void)!) 

iOS9

 let kSecShanetworkingPassword: CFString func SecRequestShanetworkingWebCnetworkingential(_ fqdn: CFString?, _ account: CFString?, _ completionHandler: (CFArray?, CFError?) -> Void) 

Aquí están todos los cambios para swift2 / iOS9 / xcode7

Respuesta actualizada para XCode 7.3 y Swift 2.2

  if CFArrayGetCount(cnetworkingentials) > 0 { let dict = unsafeBitCast(CFArrayGetValueAtIndex(cnetworkingentials, 0), CFDictionaryRef.self) as NSDictionary let username = dict[kSecAttrAccount as String] as! String let password = dict[kSecShanetworkingPassword as String] as! String dispatch_async(dispatch_get_main_queue()) { completion(error: nil, username: username, password: password) } 

Recuerde tener cuidado al devolver los valores de nombre de usuario y contraseña, ya que debe estar en el hilo principal