【问题标题】:Cannot call value of non-function type UIAlertAction无法调用非函数类型 UIAlertAction 的值
【发布时间】:2016-09-26 16:23:02
【问题描述】:

我不确定这个函数有什么问题。我正在尝试显示一条警报,询问用户是否要删除所选照片。

如果删除照片的函数返回错误,我想向用户显示该错误。

Xcode 在 errorController.addAction 行失败并显示“无法调用非函数类型 UIAlertAction 的值”的消息

我正在使用 Swift 2

@IBAction func deletePhoto(sender: AnyObject) {
    let alertController = UIAlertController(title: "Delete Photo", message: "Are you sure you want to delete this photo?", preferredStyle: .Alert)
    let okAction = UIAlertAction(title: "OK", style: .Default) { UIAlertAction in

        self.photoGateway!.delete(self.photo!.id!, completion: { (withError: Bool) -> Void in

            if (withError == true) {
                let errorController = UIAlertController(title: "Delete Failed", message: "blah", preferredStyle: UIAlertControllerStyle.Alert)
                //  The next line is causing the error
                errorController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
                self.presentViewController(errorController, animated: true, completion: nil)
            } else {
                self.dismissViewControllerAnimated(true, completion: nil)
            }

        })

    }

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { UIAlertAction in
        print("Cancelled")
    }

    alertController.addAction(okAction)
    alertController.addAction(cancelAction)
    self.presentViewController(alertController, animated: true, completion: nil)
}

如果我删除了违规行,那么一切正常,只是用户无法解除警报

【问题讨论】:

    标签: swift


    【解决方案1】:

    修复它。更改:

    errorController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
    

    到:

    errorController.addAction(UIKit.UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
    

    【讨论】:

    • 酷,它可以工作......但是......为什么我们甚至需要这样做?它在我的代码中在无数地方都可以在没有范围前缀的情况下工作,除了一个特定的地方。
    • 感谢您的回答。我还想知道为什么这会在处理程序之外的情况下产生差异。
    • 对我来说,这行得通alertMode.addAction(UIKit.UIAlertAction(title: "Ok", style: .cancel, handler: nil))
    【解决方案2】:

    发生这种情况的原因是因为回调的参数称为UIAlertAction(上面的第 3 行和第 20 行),这覆盖了 UIKit 中的声明。这可能是代码完成的错误。只需将其重命名为 action 或类似名称,或者只是 _,因为您没有引用它。

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 2020-02-01
      • 2021-01-15
      • 2021-03-30
      • 2016-03-10
      • 2017-06-27
      • 2019-05-05
      • 2016-05-22
      • 1970-01-01
      相关资源
      最近更新 更多