如何在完成处理程序中使用返回值?
Posted
技术标签:
【中文标题】如何在完成处理程序中使用返回值?【英文标题】:how to use the return value in a completion handler? 【发布时间】:2018-10-13 17:27:36 【问题描述】:我试图更好地理解 swift 中的闭包,并尝试创建一个带有完成处理程序的愚蠢函数,该函数返回一个值,但这个值无处可去...
这就是我所做的......
func productToString(num: Int,num2: Int,completion: (Int)->String)
let result = num * num2
completion(result)
let numberToString = productToString(num: 3, num2: 6) (res) -> String in
return "string:\(res)"
print(numberToString) // print statement prints ()
当我试图将这个返回值保存在一个变量中时,它只返回了一对弯括号。
我应该如何使用这个返回值?
【问题讨论】:
productToString 没有返回值,值为Void
。完成回调的概念是异步性。完成回调的调用时间可能比您的 print
晚得多。
【参考方案1】:
您将值返回到 productToString
函数中,但没有对它做任何其他事情。
func productToString(num: Int,num2: Int,completion: (Int)->String)
let result = num * num2
completion(result) // <--- Your return value ends up here
如果您想打印结果,您必须从productToString
函数中再次返回它。
func productToString(num: Int,num2: Int,completion: (Int)->String) -> String
let result = num * num2
return completion(result)
旁注:打印的空括号是一个空元组,相当于 Swift 中的Void
。
【讨论】:
以上是关于如何在完成处理程序中使用返回值?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 要求在完成处理程序中的返回值名称之前放置 _ [重复]
Alamofire 请求最初返回值,但在通过完成处理程序时被接收为 nil