iOS swift 3中的回调
您好,可以像这样进行回调吗? 我想传递一个函数作为参数,以便能够在某个任务完成后运行回调函数。
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) – >() – >()’的值转换为预期的参数类型’() – >()’
另一种方法(使用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") } }
您不能在需要self
的类的顶层运行非延迟代码( RaspakHC05
)。
除此之外,你必须在ConnectBLE
调用runCallBackFunc()
来执行闭包。
你可以做(在游乐场)
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"
您正在尝试传递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") } } }