2014-09-27 19 views
17

Sau khi xem lại một số mã có vẻ hoạt động với Xcode6 beta 5, tôi nhận thấy rằng tôi đang nhận được "Không thể chuyển đổi loại biểu thức '[AnyObject]?' gõ "lỗi 'NSArray' cho dòng này:Không thể chuyển đổi loại biểu thức '[AnyObject]?' để gõ 'NSArray'

let textFields:NSArray = loginAlert.textFields as NSArray 

Dưới đây là phần mã mà dường như là vấn đề:

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

Bất cứ ý tưởng gì vấn đề này là gì?

+2

Bạn đã thử: 'loginAlert.textFields as AnyObject! như NSArray' –

Trả lời

31

"Không thể chuyển đổi loại biểu thức '[AnyObject]?' để gõ 'NSArray"

Âm thanh như loginAlert.textFields được định nghĩa là bắt buộc và có thể nil do đó nếu bạn chắc chắn rằng nó không nil - Unwrap nó đầu tiên bằng cách sử dụng !:

loginAlert.textFields as AnyObject! as NSArray 

hay:

loginAlert.textFields! as NSArray 

dụ Khá cơ bản trong vở kịch mặt đất:

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

Cảm ơn bạn rất nhiều! Điều này đã giải quyết được vấn đề của tôi! Cảm ơn bạn đã giải thích quá, nhiều đánh giá cao! –

Các vấn đề liên quan