iOS 移除所有子视图

有的时候我们会有这样的需求,就是移除所有子视图

实际上就是NSArray中遍历元素的方法,如果使用for...in遍历的话有点低级,我们可以使用NSArray的makeObjectsPerformSelector方法遍历元素响应removeFromSuperview 方法

1
[view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

或者,使用枚举器

1
2
3
[[self.view subviews] enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {  
[(UIView*)obj removeFromSuperview];
}];

但是在swiftsubviewsArray类型,由于较之NSArray 类型swift中的Array类型要弱化好多

1.png

并没有makeObjectsPerformSelector 枚举器这两个方法
,我们可以使用高阶map函数

1
view.subviews.map{$0.removeFromSuperview()}

因为map返回一个<T>类型,这样写出会报unused的警告,代码洁癖的可以这样写。。。

1
_ = view.subviews.map{$0.removeFromSuperview()}