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 。 您必须使用closurelazy instantiation才能使其工作:

 class DelegateARC { private lazy var object: ConnectBLE = { return ConnectBLE(callFunc: self.RaspakHC05) }() var RaspakHC05: () -> () { return { print("hello from a callback") } } }