在重新访问一些似乎适用于Xcode6 beta 5的代码时,我注意到下面这一行出现了“无法将表达式的类型'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
}))
}
你知道问题出在哪里吗?
发布于 2014-09-27 23:45:51
“无法将表达式的类型'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
https://stackoverflow.com/questions/26076336
复制相似问题