Swift 中的完成处理程序
Completion Handlers in Swift
我在 swift 开发方面相当陌生,并试图掌握闭包和完成处理程序。我在一个名为 ObjectData
的结构中有一个带有以下声明的函数
func getData(id1:Int, id2:Int, completion: (dataObject? -> Void))
我想像这样调用这个函数
ObjectData.getData(1, id2: 2){
(let myObject) in
}
但我收到以下错误
Cannot invoke 'getData' with an argument list of type '(NSNumber, id2:
NSNumber, (_) -> _)'
请有人帮忙
离我现在的 Mac 很远,所以我无法测试,但试试这个:
ObjectData.getData(1, id2: 2, (dataObject) -> {
...code...
});
现在也无法检查,但我认为这也应该有效:
ObjectData.getData(1, id2: 2)(dataObject){
...code...
}
首先尝试初始化您的 class(例如 var objectData = ObjectData()),然后使用 objectData.getData 调用函数...它应该这样工作..
为了更好的可读性,将 header 更改为此。请记住,您必须声明类型,而不是变量名:
func getData(id1:Int, id2:Int, completion: (ObjectData?) -> (Void))
现在我个人使用这种语法来使用闭包:
self.getData(1, id2: 1) { (data) -> (Void) in
// Some code executed in closure
}
如果您想进一步学习,可以在此处找到完整的 syntax of closures(请注意网站的适当名称)。
希望对您有所帮助!
在SWIFT 3,称为完成闭包
func getData(id1:Int, id2:Int, completion:@escaping(dataObject?) -> (Void)) {
//Do the stuff before calling completion closure
completion(value as? dataObject)
}
ObjectData.getData(id1:1, id2: 2,completion:{(data) -> (Void) in
//Do the completion stuff here
}
我在 swift 开发方面相当陌生,并试图掌握闭包和完成处理程序。我在一个名为 ObjectData
的结构中有一个带有以下声明的函数func getData(id1:Int, id2:Int, completion: (dataObject? -> Void))
我想像这样调用这个函数
ObjectData.getData(1, id2: 2){
(let myObject) in
}
但我收到以下错误
Cannot invoke 'getData' with an argument list of type '(NSNumber, id2: NSNumber, (_) -> _)'
请有人帮忙
离我现在的 Mac 很远,所以我无法测试,但试试这个:
ObjectData.getData(1, id2: 2, (dataObject) -> {
...code...
});
现在也无法检查,但我认为这也应该有效:
ObjectData.getData(1, id2: 2)(dataObject){
...code...
}
首先尝试初始化您的 class(例如 var objectData = ObjectData()),然后使用 objectData.getData 调用函数...它应该这样工作..
为了更好的可读性,将 header 更改为此。请记住,您必须声明类型,而不是变量名:
func getData(id1:Int, id2:Int, completion: (ObjectData?) -> (Void))
现在我个人使用这种语法来使用闭包:
self.getData(1, id2: 1) { (data) -> (Void) in
// Some code executed in closure
}
如果您想进一步学习,可以在此处找到完整的 syntax of closures(请注意网站的适当名称)。 希望对您有所帮助!
在SWIFT 3,称为完成闭包
func getData(id1:Int, id2:Int, completion:@escaping(dataObject?) -> (Void)) {
//Do the stuff before calling completion closure
completion(value as? dataObject)
}
ObjectData.getData(id1:1, id2: 2,completion:{(data) -> (Void) in
//Do the completion stuff here
}