Невозможно преобразовать тип выражения "[AnyObject]?" для ввода "NSArray"
После пересмотра кода, который, как представляется, работал с Xcode6 beta 5, я заметил, что получаю сообщение "Can not convert type type [AnyObject]?" для ввода ошибки "NSArray" для этой строки:
let textFields:NSArray = loginAlert.textFields as NSArray
Вот раздел кода, который кажется проблемой:
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
}))
}
Есть идеи, в чем проблема?
Ответы
Ответ 1
"Невозможно преобразовать тип выражения" [AnyObject]? "для ввода" NSArray"
Похоже, что loginAlert.textFields
определяется как Необязательный и может быть nil
, поэтому, если вы уверены, что его не nil
- сначала распакуйте его, используя !
:
loginAlert.textFields as AnyObject! as NSArray
или
loginAlert.textFields! as NSArray
Довольно простой пример на детской площадке:
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