Swift4中UIView数组排序报错:闭包参数数量不匹配问题求解
解决Swift4中UIView数组按zPosition排序的闭包报错问题
嘿,这个问题我在从Swift3升级到Swift4的时候也踩过坑!你碰到的报错'Bool' expects 2 arguments, but 1 was used in closure body,根源是Swift版本迭代中对集合排序方法的闭包参数做了调整:
在Swift3里,sorted方法的闭包接收的是一个包含两个元素的元组,所以你可以用$0.0和$0.1来分别访问两个待比较的视图;但到了Swift4,sorted(by:)的闭包改成直接接收两个独立的参数,再用元组的方式访问就会触发参数不匹配的错误。
你只需要调整闭包的参数访问方式,就能解决问题,下面是两种可行的写法:
写法1:显式命名参数(可读性更高)
let vi = self.collectionView!.subviews.sorted { view1, view2 in return view1.layer.zPosition < view2.layer.zPosition }
写法2:简写参数(更简洁)
利用Swift的隐式参数$0(第一个参数)和$1(第二个参数),可以把代码简化成一行:
let vi = self.collectionView!.subviews.sorted { $0.layer.zPosition < $1.layer.zPosition }
这两种写法都会正确接收两个UIView实例,比较它们的layer.zPosition值,实现你想要的按层级排序的效果。
内容的提问来源于stack exchange,提问作者Nishant Chandwani
相关产品推荐
相关产品推荐

