为什么我收到错误[NSObject:AnyObject]?没有名为'下标'的成员

时间:2014-12-29 10:27:18

标签: ios swift subscript

在我下面的removeTextFieldObserver函数中,我收到错误“[NSObject:AnyObject]?”没有一个名为'subscript'的成员。如果它是一本字典肯定它应该有一个下标?

func showSimpleAlert() 
{
    let title = NSLocalizedString("A Short Title is Best", comment: "")
    let message = NSLocalizedString("A message should be a short, complete sentence.", comment: "")
    let cancelButtonTitle = NSLocalizedString("OK", comment: "")

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)

    // Create the action.
    let cancelAction = UIAlertAction(title: cancelButtonTitle, style: .Cancel) { action in
        NSLog("The simple alert's cancel action occured.")
    }

    // Add the action.
    alertController.addAction(cancelAction)

    presentViewController(alertController, animated: true, completion: nil)
}

func removeTextFieldObserver()
{
   NSNotificationCenter.defaultCenter().removeObserver(self, name: UITextFieldTextDidChangeNotification, object: alertController.textFields[0])
}

2 个答案:

答案 0 :(得分:0)

那是因为[NSObject:AnyObject]?是可选的。它可能包含[NSObject: AnyObject],也可能不包含nil

要使用该值,您需要先“解开”它:

if let object = alertController.textFields?[0] {
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UITextFieldTextDidChangeNotification, object: object)
}

alertController.textFields?[0]说“如果alertController.textFields不是nil,则返回[0]元素,否则返回nil。然后if let object =说“如果右侧的值不是nil,请将其解包并将该值分配给object

答案 1 :(得分:0)

textFields是一个可选属性,用于访问您需要解包的下标。

textFields?[0]

应该有效。如果警报控制器没有textFields,则会发送nil。