func method(arg: Bool, completion: (Bool) -> ()) {
print("First line of code executed")
// do stuff here to determine what you want to "send back".
// we are just sending the Boolean value that was sent in "back"
completion(arg)
}
使用方法:
method(arg: true, completion: { (success) -> Void in
print("Second line of code executed")
if success { // this will be equal to whatever value is set in this method call
print("true")
} else {
print("false")
}
})
8条答案
按热度按时间1zmg4dgp1#
假设你有一个下载功能,可以从网络下载一个文件,并且希望在下载任务完成时得到通知。
efzxgjgh2#
我很难理解答案,所以我想任何其他像我这样的初学者可能会有同样的问题。
我的解决方案和上面的答案一样,但希望对初学者或一般理解有困难的人来说更清楚和容易理解。
创建具有完成处理程序的函数
要使用该函数
您的输出将为
做点什么
哒哒!!!
vlurs2pr3#
简单示例:
使用方法:
ctehm74n4#
示例:
block_完成
在Block_Completion之后执行某些操作!!
neskvpey5#
为此,我们可以使用闭包。请尝试以下操作
在某些情况下,我们可以如下所示调用此函数。
有关关闭的详细信息,请参阅以下链接。
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
ryoqjall6#
除上述内容外:可使用尾部封口。
gtlvzcf87#
我对定制的完成处理程序有点困惑。在你的例子中:
假设你有一个下载功能,可以从网络下载一个文件,并且希望在下载任务完成时得到通知。
您的
// download code
仍将异步运行。为什么代码不直接进入您的let flag = true
和completion Handler(success: flag)
,而不等待您的下载代码完成?ih99xse18#