2014-09-27 19 views
17

Po ponownym sprawdzeniu kodu, który wydawał się działać z Xcode6 beta 5, zauważyłem, że otrzymuję komunikat "Nie można przekonwertować typu wyrażenia" [AnyObject]? wpisać „błąd„NSArray”dla tej linii:Nie można przekonwertować typu wyrażenia "[AnyObject]?" wpisać "NSArray"

let textFields:NSArray = loginAlert.textFields as NSArray 

Oto fragment kodu, który wydaje się być problem:

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    
     })) 
} 

żadnych pomysłów na czym polega problem?

+2

Czy próbowałeś: 'loginAlert.textPłyty jako AnyObject! jako NSArray' –

Odpowiedz

31

"Nie można przekonwertować typu wyrażenia" [AnyObject]? " wpisać „NSArray””

Brzmi jak loginAlert.textFields jest zdefiniowany jako opcjonalny i może być nil więc jeśli jesteś pewien, że jej nie nil - rozpakowanie go najpierw za pomocą !:

loginAlert.textFields as AnyObject! as NSArray 

czyli

loginAlert.textFields! as NSArray 

Dość prosty przykład w grze ziemia:

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 
+0

Dziękuję bardzo! To rozwiązało mój problem! Dziękuję również za wyjaśnienie, bardzo doceniane! –

Powiązane problemy