gpt4 book ai didi

ios - NSURLSession 返回元组的问题

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

我在一个网站上做了一个请求,我想返回 3 个字符串,但我遇到了这个问题:

Tuple types '(StringLiteralConvertible, StringLiteralConvertible, StringLiteralConvertible)' and '()' have a different number of elements (3 vs. 0)

这就是我的代码的样子:

func downloadContent() -> (title : String, message : String, buttonText : String)? {
let url = NSURL(string: websitePath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url) { (data, response, error) -> Void in
if error != nil {
print(error?.localizedDescription)

return ("", "", "")
}

}

task.resume()

return nil
}

最佳答案

您的代码有错误。如果你仔细观察它,你就会从一个期望返回值为 Void 的闭包内部返回。这就是错误的原因,

'(StringLiteralConvertible, StringLiteralConvertible, StringLiteralConvertible)' and '()' 

类型“()”表示它是预期的 void 类型。

那么,你的错误在哪里,

在你的 dataTaskWithURL 方法中,闭包看起来像这样,

{ (data, response, error) -> Void in
if error != nil{
print(error?.localizedDescription)

return ("","","")
}
}

闭包期望返回 Void 类型,但您返回的是字符串元组。

上述代码的缺点之一是异步代码执行。 dataTask 异步运行并立即返回,因此您不能返回它的值。您应该在调用完成后使用一些完成 block 来获取结果。

我建议您按照以下方式对其进行重组,

func downloadContent(completion: (title : String, message : String ,buttonText : String)? -> Void){
let url = NSURL(string: websitePath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url) { (data, response, error) -> Void in
if error != nil{
print(error?.localizedDescription)
}

completion((title: "", message: "", buttonText: ""))
}

task.resume()
}

关于ios - NSURLSession 返回元组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267960/

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