swift - 是否可以在 Swift 中将空函数声明为变量?

标签 swift swift3

是否可以做这样的事情,并创建一个稍后可分配的空函数,因为我不断收到错误,无法调用分配的函数,这是我得到的最接近的函数

fileprivate class actionButton: UIButton{
    var functo = ()
    func tapped(functoCall: () ->Void){
        self.functo()
    }
}

此按钮在函数中初始化,该函数将函数作为参数并将其传递给此按钮,该按钮是上面指定的类的后代

    button.functo = funcToCall()
    button.addTarget(self, action: #selector(yes.tapped(functoCall:)), for: .touchDown)

我遇到的问题是,当我尝试调用 self.functo() 时,我无法调用非函数类型

最佳答案

是的,这是可能的。

您收到错误的原因是编译器无法知道 functo 实际上是一个可调用的函数。您隐式地将其设为 Any

您只需首先将其(例如使用 if let)转换为所需类型的函数即可。

类似这样的事情应该可以帮助您开始:

var myfunc: Any = ()

func test() -> String {
    return "Cool"
}
// Assign any function to myfunc
myfunc = test

// Just cast it to the expected type
if let x = myfunc as? ()->String {
    x()
}

如果问题只是针对这个问题(正如反对者所认为的那样),您只需输入带有函数签名的变量即可。这是一个简单的案例:

var myfunc: ((Any) -> Void)? = nil

然后当你分配它时它是可调用的。

关于swift - 是否可以在 Swift 中将空函数声明为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313123/

相关文章:

ios - 找不到子项目(框架)的模块

ios - 更改 URL 最后一个组件名称并向重命名的组件添加扩展名

arrays - 如何在 Swift 3 中重新排序核心数据对象数组并重新排序其 Int 属性

ios - 后台上下文保存导致 NSFetchedResultsController didChange anObject 调用 .delete 而不是 .update

ios - Twilio 多重推送凭证 sid

ios - 为什么XCTestCase会覆盖XCTest的setup方法?

ios - 为什么不同swift类中的函数没有被调用?

IOS Swift 从数组中搜索表

ios - 使用 UITableViewAutomaticDimension 时如何手动设置某些单元格的高度?

ios - 从 SKTileMapNode 中删除特定图 block