在我下面的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])
}
答案 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。