当前位置: 首页 > 面试题库 >

Swift闭包for循环

杭令
2023-03-14
问题内容

目前,我正在执行在循环内执行闭包的代码。我想知道所有闭包何时完成执行。目前,我正在使用一个计数器,并在关闭完成时将其递增,然后将其与要执行的时间进行比较。代码如下

var count = 0
var noOfTimes = 10
for i in 0..<noOfTimes {
    someVariable.someClosure {
        result in
        count = count + 1
        if count == noOfTimes {
            //do something
        }
    }
}

有没有计数器的更好的方法。谢谢。


问题答案:

您可以DispatchGroup为此使用。它的工作就像计数信号灯一样。您可以通过调用来增加计数,enter并通过来减少计数leave。您可以使用以下命令安排闭包在计数达到0时执行notify

let dispatchGroup = DispatchGroup()
var noOfTimes = 10
for i in 0..<noOfTimes {
    dispatchGroup.enter()  //  Enter the dispatch group
    someVariable.someClosure {
        result in
        // Process result
        ...
        dispatchGroup.leave() // Exit dispatch group
    }
}
dispatchGroup.notify(queue: DispatchQueue.main, execute: {
    print("All Done")
})


 类似资料:
  • Swift 循环 该循环方式在 Swift 3 中已经弃用。 Swift for 循环用来重复执行一系列语句直到达成特定条件,一般通过在每次循环完成后增加计数器的值来实现。 语法 Swift for 循环的语法格式如下: for init; condition; increment{ 循环体 } 参数解析: init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量

  • Swift 循环 Swift for-in 循环用于遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。 语法 Swift for-in 循环的语法格式如下: for index in var { 循环体 } 流程图: 实例 1 import Cocoa for index in 1...5 { print("\(index) 乘于 5 为:\(i

  • 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。 Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 匿名函数比较相似。 全局函数和嵌套函数其实就是特殊的闭包。 闭包的形式有: 全局函数 嵌套函数 闭包表达式 有名字但不能捕获任何值。 有名字,也能捕获封闭函数内的值。 无名闭包,使用轻量级语法,可以根据上下

  • 主要内容:以下是纠正/补充内容:Swift 4中的Closures(闭包)类似于组织为块的自包含函数,并且像C和Objective C语言一样调用。 在函数内定义的常量和变量引用被捕获并存储在闭包中。 函数可以看作是闭包的特殊情况,它采用以下三种形式 - 全局函数 嵌套函数 闭包表达式 有名称,不捕获任何值 有名称,从封闭函数中捕获值。 未命名的闭包从相邻块中捕获值 Swift 4语言中的Closures(闭包)表达式遵循清晰,

  • 问题内容: 我是Swift的新手,当我遇到转义的闭包时,我正在阅读手册。我根本没有得到手册的描述。有人可以简单地向我解释一下Swift中的转义闭包是什么。 问题答案: 考虑此类: 将传入的闭包分配给类中的属性。 现在是另一个类: 如果我调用,则闭包将存储在的实例中。由于是在闭包中捕获的,因此的实例还将对其具有很强的引用性。 基本上,这是逃脱的闭包的例子! 您可能想知道,“什么?那么封闭从何处逃脱到

  • 问题内容: 我相信我遇到了一个问题,即我的关闭发生在后台线程上,而UITableView的更新速度不够快。我正在打电话给REST服务,而在关闭时,我有一个电话,但是要花几秒钟的时间才能发生。如何使数据重新加载更快(也许在主线程上?) REST查询功能-使用SwiftyJSON库进行解码 在调试器中调用一次 问题答案: UIKit不是线程安全的。UI仅应从主线程更新: 更新 。在Swift 3及更高