gpt4 book ai didi

ios - 无法使用 Swift Closure 作为参数调用函数

转载 作者:可可西里 更新时间:2023-11-01 00:38:02 25 4
gpt4 key购买 nike

我编写了一个函数来进行 Web 服务调用、获取一些 JSON、使用数据形成一个数组,并在完成时将其返回到闭包中。我是这种语法的新手,但编译器说它是正确的,所以我假设它是正确的。

class APIHelper: NSObject {

func getArticles(completion: (result: NSArray, error: NSError)->()) {

}
}

我的问题是,我不知道如何调用这个方法。当我尝试时,自动完成不会显示我的完成关闭。相反,它的行为就像我应该将该方法传递给它在 (APIHelper) 中声明的类的实例。

//View Controller
override func viewDidLoad() {
super.viewDidLoad()

APIHelper.getArticles( { (result: Array!, error: NSError!) -> Void in

}) //COMPILER ERROR: '(NSArray!, NSError!) -> Void' is not convertible to 'APIHelper'
}

有没有其他人遇到过这个错误?如果是这样,如何调用此方法并实现闭包?

最佳答案

首先,看起来您正试图在类本身上调用 APIHelper 的实例方法。如果你想这样做,你要么需要创建一个类的实例作为方法的接收者,要么你需要将你的方法声明为类方法以便能够以你尝试的方式使用它.

class APIHelper: NSObject {

class func getArticles(completion: (result: NSArray, error: NSError)->()) {

}
}

此外,参数的类型必须与用作实参的类型相同。如果你已经声明了获取 NSArray 对象的方法,你应该以 NSArray 的形式访问它,而不是 Array,所以你应该像这样调用方法。

APIHelper.getArticles( { (result: NSArray, error: NSError) -> Void in
// stuff
})

可以简化为以下内容,它允许 Swift 的类型推断来确定参数的类型,因此您不必担心它们不匹配。

APIHelper.getArticles { result, error in
// stuff
}

关于ios - 无法使用 Swift Closure 作为参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com