swift - for - ¿No se puede convertir el tipo de expresión '[AnyObject]?' para escribir 'NSArray'



xcode requirements (1)

Al revisar un código que parecía funcionar con Xcode6 beta 5, noté que obtenía un "¿No se puede convertir el tipo de expresión '[AnyObject]?' para escribir 'NSArray' "error para esta línea:

let textFields:NSArray = loginAlert.textFields as NSArray

Aquí está la sección de código que parece ser el problema:

override func viewDidAppear(animated: Bool) {
    if PFUser.currentUser() == nil{
        var loginAlert:UIAlertController = UIAlertController(title: "Sign Up / Login", message: "Please sign up or login", preferredStyle: UIAlertControllerStyle.Alert)

loginAlert.addTextFieldWithConfigurationHandler({
            textfield in
            textfield.placeholder = "Your username"
        })

        loginAlert.addTextFieldWithConfigurationHandler({
            textfield in
            textfield.placeholder = "Your password"
            textfield.secureTextEntry = true
        })

        loginAlert.addAction(UIAlertAction(title: "Login", style: UIAlertActionStyle.Default, handler: {
            alertAction in
            let textFields:NSArray = loginAlert.textFields as NSArray
            let usernameTextfield:UITextField = textFields.objectAtIndex(0) as UITextField
            let passwordTextfield:UITextField = textFields.objectAtIndex(1) as UITextField            
        }))
}

¿Alguna idea de cuál es el problema?


"¿No se puede convertir el tipo de expresión '[AnyObject]?' para escribir 'NSArray' "

Suena como loginAlert.textFields se define como Opcional y podría ser nil por lo tanto, si está seguro de que no es nil , ¡desenvuélvalo primero usando ! :

loginAlert.textFields as AnyObject! as NSArray

o:

loginAlert.textFields! as NSArray

Ejemplo bastante básico en el patio de recreo:

var temp:Array<String>?  // define Optional array 

temp = Array<String>()   // well, we create new Array but since its optional we need set "!" each time during manipulation

temp!.append("val1") // 1st off we unwrap it and add new value

var newArray = temp as AnyObject! as Array<String> // to downcast to Array<String>, we unwrap it with AnyObject! first




xcode6