目录
- 1. filter 优化
- 2. return 优化
- 案例1
- 案例2
- 3. for循环优化
- 案例1
- 案例2
- 4. 枚举 优化
- 5. 未完待续……
1. filter 优化
原代码
if var vcs = vcs {
for vc in vcs {
if vc is XXLoginViewController {
if let index = vcs.firstIndex(of: vc) {
vcs.remove(at: index)
}
}
}
修改后
vcs = vcs?.filter { !($0 is XXLoginViewController) }
或者
vcs?.removeAll(where: { $0 is XXLoginViewController })
filter, map, reduce的用法详见
https://juejin.cn/post/6844903574506307592
https://www.jianshu.com/p/74854e641d87
2. return 优化
案例1
func checkExpire(time: TimeInterval) -> Bool {
if Date().timeIntervalSince1970 - time > 0 {
return false
}
return true
}
优化后
func checkExpire(time: TimeInterval) -> Bool {
return Date().timeIntervalSince1970 < time
}
是不是更简洁了呢!
案例2
if (isInCache) {
return result;
} else {
return [DataXXManager.shareManager isStickUpWithXxId:xxId];
}
可以通过移除不必要的else语句来优化代码,因为在if条件满足时,return会直接返回,后续代码不会执行。以下是优化后的代码:
优化后
if (isInCache) {
return result;
}
return [DataXXManager.shareManager isStickUpWithXxId:xxId];
3. for循环优化
案例1
for index in 0..<array.count {
guard let item = array[index] as? XXX else {
continue
}
// do other
}
优化后
for (index, header) in array.enumerated() {
guard let item = header as? XXX else {
continue
}
// do other
}
案例2
优化前
var index = 0
var tempItems: [[ObjectProtocol]] = [ObjectProtocol]
for item in self.items {
if index >= 3 {
break
}
if let f = self.items.last as? [ObjectProtocol] {
tempItems.append(f)
}
index += 1
}
self.items = tempItems
优化后
var tempItems: [[ObjectProtocol]] = []
for item in self.items.prefix(3) {
if let f = item as? [ObjectProtocol] {
tempItems.append(f)
}
}
self.items = tempItems
4. 枚举 优化
例如有如下的需求,像数据库中添加obj字段,obj的order字段如果是auto,则根据head和tail字段来表示自动变化order,如果非auto,则使用obj自己的order字段 内容。
直观的代码如下:
- (void)addSomethingToDB(NSObject *)obj auto:(BOOL)auto isAddToHead:(BOOL)head isAddToTail:(BOOL)tail {
if (auto) {
if (head) {
obj.order = --index
} else if (tail) {
obj.order = ++index
}
}
}
上面的代码,用了auto, head和tail来表示,添加的顺序。是不是繁琐。那怎么简化呢?
可以用枚举来优化。
typedef NS_ENUM(NSInteger, XXSortOrder) {
XXSortOrderNo, // 不自动排序
XXSortOrderAddToHead, // 自动排序,在头插入
XXSortOrderAddTail, // 自动排序,在尾插入
}
- (void)addSomethingToDB(NSObject *)obj sortType:(XXSortOrder)sortType {
if (XXSortOrder == XXSortOrderAddToHead) {
obj.order = --index
} else if (XXSortOrder == XXSortOrderAddToHead) {
obj.order = ++index
}
}
这么写,是不是从方法名和函数内容都精简了不少呢?哈。