La expresión era demasiado compleja para resolverse en un time razonable Swift 3

Estoy intentando convertir mi proyecto a Swift 3, pero recibo un post de error que dice que la expresión es demasiado compleja para resolverse en un time razonable. No estoy seguro de por qué esto es así, ya que esta expresión funcionaba bien en Swift 2.2, pero ahora, de repente, está tomando tanto time.

¿Alguien sabe cómo puedo arreglar esto? Aquí está la expresión. Básicamente es un dictionary que se usará más tarde con SecItemCopyMatching para extraer un elemento del llavero que se guardó con una label de key. Realiza un touchID para hacer esto, ya que se guardó con ese parámetro de locking:

 let query : [String: AnyObject] = [String(kSecClass) : kSecClassGenericPassword, String(kSecAttrService) : keyTag as AnyObject, String(kSecAttrAccount) : keyTag, String(kSecReturnData) : kCFBooleanTrue, String(kSecMatchLimit) : kSecMatchLimitOne, String(kSecUseOperationPrompt) : message] 

Desafortunadamente, debe definir su consulta como var y asignar los valores por separado. Parece que Swift 3.0 no puede manejar expresiones tanto time.

Su código se verá así:

 var query = [String: AnyObject]() query[String(kSecClass)] = kSecClassGenericPassword query[String(kSecAttrService)] = keyTag as AnyObject query[String(kSecAttrAccount)] = keyTag query[String(kSecReturnData)] = kCFBooleanTrue query[String(kSecMatchLimit)] = kSecMatchLimitOne query[String(kSecUseOperationPrompt)] = message 

Pruebe arrojar todos los valores del dictionary a AnyObject . A less que ya sean objects derivados de NSObject (como NSString , NSNumber , NSArray y NSDictionary) , debe enviarlos a AnyObject . Swift 3 ha eliminado el puente automático a los types de Foundation.

 let query: [String: AnyObject] = [String(kSecClass) : kSecClassGenericPassword as AnyObject, String(kSecAttrService) : keyTag as AnyObject, String(kSecAttrAccount) : keyTag as AnyObject, String(kSecReturnData) : kCFBooleanTrue as AnyObject, String(kSecMatchLimit) : kSecMatchLimitOne as AnyObject, String(kSecUseOperationPrompt) : message as AnyObject]