Swift闭包$0含义及firstIndex(where:)是否隐式循环问题
Swift闭包简写与
firstIndex(where:)逻辑解答 $0.id是Swift闭包的简写语法
Swift为短闭包提供了自动参数名简写能力:当闭包逻辑足够简单、不需要显式声明参数名时,你可以直接用$0、$1、$2……按顺序指代闭包接收的第1、2、3……个入参,不需要手动在闭包定义里写参数列表。
你这段代码里,$0代表闭包当前接收到的expenses.items数组中的单个元素,$0.id就是取这个元素的id属性。因为闭包每调用一次,传入的都是数组里下一个待匹配的元素,所以每次拿到的$0对应的元素不同,id值自然也不同,就可以和目标id做相等比较。
你看到的简写闭包{$0.id == expenses.businessItems[offset].id},和下面的完整写法是完全等价的:{ (item: ExpenseItem) in return item.id == expenses.businessItems[offset].id }传入
firstIndex(where:)的闭包确实由方法内部的隐式遍历驱动firstIndex(where:)是Swift集合类型的内置方法,它本身就封装了完整的数组遍历逻辑:方法会从数组起始位置开始逐个取出元素,把元素作为入参调用你传入的闭包,一旦闭包返回true,就立刻终止遍历,返回当前元素的索引;如果遍历完整个数组都没有满足闭包条件的元素,就返回nil。
这种设计是Swift标准库的常规写法,和map、filter、contains(where:)等方法的逻辑一致:遍历流程由方法内部实现,你只需要通过闭包传入「单个元素对应的判断/转换规则」即可,不需要手动编写for循环处理遍历过程。
内容的提问来源于stack exchange,提问作者Lowb
相关产品推荐
相关产品推荐

