3

我在快速开发和尝试处理闭包和完成处理程序方面相当陌生。我在一个名为 ObjectData 的结构中有一个带有以下声明的函数

func getData(id1:Int, id2:Int, completion: (dataObject? -> Void)) 

我试图调用这个函数

ObjectData.getData(1, id2: 2){
    (let myObject) in
}

但我收到以下错误

无法使用类型为“(NSNumber,id2:NSNumber,(_)-> _)”的参数列表调用“getData”

请有人帮忙

4

4 回答 4

4

为了更好的可读性,将标题更改为此。请记住,您必须声明类型,而不是变量名:

func getData(id1:Int, id2:Int, completion: (ObjectData?) -> (Void))

现在我个人使用这种语法来使用闭包:

self.getData(1, id2: 1) { (data) -> (Void) in

     // Some code executed in closure
}

如果你想进一步学习,你可以在这里找到完整的闭包语法(注意网站的适当名称)。希望能帮助到你!

于 2015-07-22T12:01:11.087 回答
1

现在离我的Mac很远,所以我无法测试,但试试这个:

ObjectData.getData(1, id2: 2, (dataObject) -> { 
...code...
});

现在也无法检查,但我认为这也应该有效:

    ObjectData.getData(1, id2: 2)(dataObject){ 
...code...
}
于 2015-07-22T11:20:05.933 回答
0

尝试首先初始化您的类(例如 var objectData = ObjectData()) ,然后使用 objectData.getData 调用函数...它应该以这种方式工作..

于 2015-07-22T11:48:28.293 回答
0

在 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
}
于 2016-11-04T11:59:42.760 回答