有的时候我们会有这样的需求,就是移除所有子视图
实际上就是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];
}];
但是在swift
中subviews
是Array
类型,由于较之NSArray
类型swift
中的Array
类型要弱化好多
并没有makeObjectsPerformSelector
和枚举器
这两个方法
,我们可以使用高阶map函数1
view.subviews.map{$0.removeFromSuperview()}
因为map返回一个<T>
类型,这样写出会报unused
的警告,代码洁癖的可以这样写。。。1
_ = view.subviews.map{$0.removeFromSuperview()}