iOS -- 代码优化

目录

  • 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
	}
}

这么写,是不是从方法名和函数内容都精简了不少呢?哈。

5. 未完待续……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【华为路由】OSPF多区域配置

网络拓扑 设备接口地址 设备 端口 IP地址 RTA Loopback 0 1.1.1.1/32 G0/0/0 10.1.1.1/24 RTB Loopback 0 2.2.2.2/32 G0/0/0 10.1.1.2/24 G0/0/1 10.1.2.1/24 RTC Loopback 0 3.3.3.3/32 G0/0/0 10.1.2.2/24 G0/0/1 10.1.3.1/24 RTD Loopback 0 4.4.4…

大模型Transformer笔记:KV缓存

1 MHA&#xff08;Multi-Head Attention&#xff09; 最经典的多头注意力 等价于多个独立的单头注意力的拼接 对于LLM来说&#xff0c;一般都是自回归地一个一个token的输出&#xff0c;也就相当于只有Transformer的decoder input在变化&#xff0c;之前作为prompt部分的是不变…

java智能物流管理系统源码(springboot)

项目简介 智能物流管理系统实现了以下功能&#xff1a; 智能物流管理系统的主要使用者分为管理员&#xff0c;顾客&#xff0c;员工&#xff0c;店主。功能有个人中心&#xff0c;顾客管理&#xff0c;员工管理&#xff0c;店主管理&#xff0c;门店信息管理&#xff0c;门店…

【制造业&电子产品】电脑电子元件检测系统源码&数据集全套:改进yolo11-TADDH

改进yolo11-SCConv等200全套创新点大全&#xff1a;电脑电子元件检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析&#xff1a; 这道题提到了对于“区间”进行操作&#xff0c;而差分数列就是对于区间进行操作的好方法。 观察差分数列&#xff1a; 给定数列&#xff1a;1 3 5 2 7 1 差分数列&#xff1a;1 2 2 -3 5 6 题目要求把原数组全部…

基于Springboot+Vue的食品商城系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景&#xff1a;win11&#xff0c;duilib应用&#xff0c;双显示器&#xff0c;两台分辨率相同&#xff0c;分别设置不同的缩放以后&#xff0c;应用运行以后&#xff0c;程序闪一下消失或者程序还在&#xff0c;但是UI显示不出来。 原因 窗口风格设置不合理&#xff0c;所以…

记录贴 为VScode配置C语言环境

大致步骤参考这位博主的过程&#xff1a;如何在 VS Code 中编写、运行C语言程序 教程_visual studio code怎么写c语言-CSDN博客 第一步&#xff1a;安装VScode。 第二步&#xff1a;安装两个插件&#xff1a;C/C Extension Pack和code runner。&#xff08;后面我发现&#x…

django5入门【03】新建一个hello界面

文章目录 1、前提条件⭐2、操作步骤总结3、实际操作示例 1、前提条件⭐ 将上一节创建的 Django 项目导入到 PyCharm 中。 2、操作步骤总结 &#xff08;1&#xff09;在 HelloDjango/HelloDjango 目录下&#xff0c;新建一个 views.py 文件。 &#xff08;2&#xff09;在 H…

WebGl 缩放矩阵

缩放矩阵是线性代数中的一种矩阵&#xff0c;用于描述图形在空间中沿着各个坐标轴进行均匀缩放的变换。在3D图形编程中&#xff0c;缩放矩阵通常用于调整物体的大小&#xff0c;而不改变其形状。 | x 0 0 0 | | 0 y 0 0 | | 0 0 z 0 | | 0 0 0 1 | 其中&#xff0…

2024 Rust现代实用教程:1.3获取rust的库国内源以及windows下的操作

文章目录 一、使用Cargo第三方库1.直接修改Cargo.toml2.使用cargo-edit插件3.设置国内源4.与windows下面的rust不同点 参考 一、使用Cargo第三方库 1.直接修改Cargo.toml rust语言的库&#xff1a;crate 黏贴至Cargo.toml 保存完毕之后&#xff0c;自动下载依赖 拷贝crat…

Java中自增自减,赋值,逻辑,三元运算符

自增自减运算符 在某个变量前面或者后面加一--在某个变量前面或者后面减一 可以看见&#xff0c;当a输出时&#xff0c;a是没有变化的&#xff0c;说明如果是在变量后就是先使用再增加&#xff0c;而b输出时&#xff0c;b增加了1&#xff0c;说明如果是在变量前面就是先增加再…

Android Activity 启动模式

Standard 启动模式 页面跳转顺序 MainActivity -> StandardActivity -> StandardActivity -> StandardActivity 页面栈 示例图 任务栈中只存在MainActivity时 任务栈中存在MainActivity、StandardActivity MainActivity -> StandardActivity MainActivity…

echarts给Y轴的不同轴线设置不同的颜色的样式

官方文档 option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [150, 230, 224, 218, 135, 147, 260],type: line,}] }; 效果&#xff1a; 需要添加参数markLine option {xAxis: {type: category,data: [M…

python实战(一)——iris鸢尾花数据集分类

一、任务背景 本文是python实战系列专栏的第一篇文章&#xff0c;我们将从分类开始由浅入深逐步学习如何使用python完成常规的机器学习/深度学习任务。iris数据集是经典的机器学习入门数据集&#xff0c;许多分类任务教程都会以这个数据集作为示例&#xff0c;它的数据量是150条…

大语言模型微调方法详解【全量微调、PEFT、LoRA、Adapter】

NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 四、大语言模型的Scaling Law【Power Low】 五、大语言模型微调 文章目录 NLP-大语言模型学…

12个免费商用视频素材网站,助你打造高质量短视频!

我来啦&#xff0c;作为一个资深短视频运营&#xff01; 在剪辑了1362条片子后&#xff0c;我总结出下面的这些素材网站~ 基本上都是剪辑中常用到的&#xff0c;下载的视频也是MP4格式&#xff0c;直接就可以用&#xff0c;还有图片、音效和Pr教程推荐&#xff0c;总有一款适…

使用Llama Index与Streamlit实现一个从文本中提取专业术语和定义网页小程序

Llama Index有许多用例&#xff08;语义搜索、摘要等&#xff09;&#xff0c;并且都有很好的记录。然而&#xff0c;这并不意味着我们不能将Llama Index应用到非常具体的用例中&#xff01; 在本教程中&#xff0c;我们将介绍使用Llama Index从文本中提取专业术语和定义的设计…

迭代器边遍历边删除存在的问题

迭代器边遍历边删除存在的问题以及原理 01-问题 ​ 我们先来看看如下代码 public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list.add(4);list.add(3);list.add(2);list.add(7);list.add(0);Iterator<Integer>…

CSP-J代码解析!最新2024CSP-J题解及参考代码

经过整理&#xff0c;老师已经整理了今年CSP-J复赛的题目和代码解析&#xff01; T4题目名称有误&#xff0c;更正&#xff1a;接龙&#xff01; 需要PDF版本的→malaoshi606 T1 扑克牌 poker 算法&#xff1a;模拟&#xff0c;桶数组思路&#xff1a;创建一个标记数组vis&…