您好可以像这样进行回调吗?我想传递一个函数作为参数,以便在完成一些任务后能够运行回调函数。
class ConnectBLE {
var callBackFunc: ()->()
init(callFunc: @escaping () -> ()){
callBackFunc = callFunc
}
func runCallBackFunc() {
callBackFunc()
}
}
class DelegateARC {
private let object = ConnectBLE(callFunc: RaspakHC05)
func RaspakHC05() {
print("hello from a callback")
}
}
但我有错误。 无法转换类型'(DelegateARC)的值 - > () - > ()'预期参数类型'() - > ()'
答案 0 :(得分:3)
您无法在需要self
(RaspakHC05
)的类的顶层运行非延迟代码。
除此之外,您必须在某处runCallBackFunc()
调用ConnectBLE
来执行关闭。
你可以(在游乐场)
class ConnectBLE {
var callBackFunc: ()->()
init(callFunc: @escaping () -> ()){
callBackFunc = callFunc
}
func runCallBackFunc() {
callBackFunc()
}
}
class DelegateARC {
init() {
ConnectBLE(callFunc: RaspakHC05).runCallBackFunc()
}
func RaspakHC05() {
print("hello from a callback")
}
}
DelegateARC() // prints "hello from a callback"
答案 1 :(得分:2)
另一种方法(使用Optional来延迟给予object
实际值,直到完全初始化为止:
class ConnectBLE {
var callBackFunc: ()->()
init(callFunc: @escaping () -> ()){
callBackFunc = callFunc
}
func runCallBackFunc() {
callBackFunc()
}
}
class DelegateARC {
private var object : ConnectBLE! //*
init() {
self.object = ConnectBLE(callFunc: RaspakHC05) // *
}
func RaspakHC05() {
print("hello from a callback")
}
}
答案 2 :(得分:1)
您正在尝试传递function
而不是closure
。您必须使用closure
和lazy instantiation
才能使其正常运行:
class DelegateARC {
private lazy var object: ConnectBLE = {
return ConnectBLE(callFunc: self.RaspakHC05)
}()
var RaspakHC05: () -> () {
return {
print("hello from a callback")
}
}
}