在我的应用程序中,我有几种情况,每种情况下都显示不同的UIAlertController,因此我创建了一个函数来显示此警报,但似乎无法在“okAction”内部调用self.Function。我收到此错误:



这是代码:

func showAlertController( titleOfAlert: String, messageOfAlert : String, doAction : () )
{
    let refreshAlert = UIAlertController(title: titleOfAlert, message: messageOfAlert, preferredStyle: .Alert)

    let okAction = UIAlertAction(title: "Save", style: UIAlertActionStyle.Default) {
        UIAlertAction in

        self.doAction()
    }

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

    refreshAlert.addAction(okAction)
    refreshAlert.addAction(cancelAction)

    self.presentViewController(refreshAlert, animated: true, completion: nil)
}

这是我正在调用的功能之一:
func changeLabel1()
{
    label.text = "FOR BUTTON 1"
}

我该如何解决?

最佳答案

  • 删除self前面的doAction(),因为您不对对象self调用操作。
  • 如果这样做,编译器将告诉您Invalid use of '()' to call a value of non-function type '()'。之所以如此,是因为doAction是没有功能的,而是一个空的元组。函数具有输入参数和返回类型。因此doAction的类型应为() -> Void-它不输入任何内容并返回Void,即不返回任何内容。

  • 代码应如下所示:
    func showAlertController( titleOfAlert: String, messageOfAlert : String, doAction : () -> Void ) {
        ...
        let okAction = UIAlertAction(title: "Save", style: UIAlertActionStyle.Default) { action in
            doAction()
        }
        ...
    }
    

    如果要将action传递给doAction方法,则必须将类型更改为(UIAlertAction) -> Void并通过doAction(action)调用它。

    08-17 14:58