当前位置: 首页 > news >正文

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. 未完待续……

相关文章:

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)}} }修改后 v…...

docker配置普通用户访问

文章目录 &#x1f315;方法一&#xff1a;让所有用户都可以使用docker&#x1f319;创建docker用户组&#x1f319;把当前用户加入docker用户组&#x1f319;单独把某个用户加入docker用户组&#x1f319;更新激活docker用户组&#x1f319;验证不需要sudo执行docker命令&…...

php后端学习,Java转php

遇到前后端跨域 php解决跨域问题可以加上下面的代码&#xff1a; header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端&#xff0c; 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…...

Elasticsearch 中管道介绍

Elasticsearch 中管道 文章目录 Elasticsearch 中管道1、管道( Ingest Pipeline)1.**管道描述**2.**处理器(Processors)**(1)**`attachment`处理器**(2)**`remove`处理器**3.**整体流程**4.**应用场景**示例:如何使用该管道总结2、如何设置`attachment`处理器取出`指定…...

将jinjia2后端传到前端的字典数据转化为json

后端代码 from flask import Flask, render_template, jsonifyapp Flask(__name__)app.route(/) def index():data {key: value, number: 123}return render_template(index.html, datadata)if __name__ __main__:app.run(debugTrue) 前端代码 使用tojson过滤器即可 <!…...

Linux中如何理解一切皆文件

根据之前的学习我们会有一些少许的疑惑&#xff0c;我们的stdin &#xff0c;stdout&#xff0c;stderr访问的是键盘显示器&#xff0c;然而键盘显示器等他们都有一个共同的特点就是他们都是外设&#xff0c;那么这些外设是怎么被看成是文件的呢&#xff1f; 看图可以知道硬件的…...

【贪心算法】(第十一篇)

目录 坏了的计算器&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 合并区间&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 坏了的计算器&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;Leet…...

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用&#xff1a;注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…...

深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制

文章目录 前言1. 使用 “Build Trigger”&#xff08;构建触发器&#xff09;2. 使用 Jenkins Pipeline 实现任务触发3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件例子1&#xff1a;任务 A 成功后自动执行任务 B例子2&#xff1a;任务 A 成功后自动执行 Pipeline…...

无人机飞手执照培训为什么需要脱产学习?

无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面&#xff1a; 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入&#xff0c;包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联&#xff0c;需要学员进行系统的学…...

PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程

目录 一、pgcrypto 简介1.1 安装 pgcrypto 扩展1.2 pgcrypto 包含的函数 二、用法①&#xff1a;对称加密&#xff08;使用 AES、Blowfish 算法&#xff09;2.1 密钥2.2 密钥偏移量 三、用法②&#xff1a;PGP加解密3.1 什么是PGP算法&#xff1f;3.2 使用 GPG 生成密钥对3.3 列…...

uniapp使用webView打开的网页有缓存如何解决(APP,微信小程序)

1、给webView的url增加时间戳 this.webviewUrl ${url}?t${new Date().getTime()}; // 添加时间戳 2、在nginx服务器上添加响应头&#xff0c;告诉浏览器不可以使用缓存 location / {root /opt/webs/lcdp-client/dist;index index.html index.htm;try_files $uri $uri/ /…...

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;HarmonyOs组件化的使用&#xff0c;有利于模块之间的解…...

解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题

readeck 是一个内容中心&#xff0c;目前已支持中文翻译 这是本地化部署后的效果&#xff1a; 原命令为&#xff1a; docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…...

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

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

零代码快速开发智能体 |甘肃旅游通

在互联网信息爆炸的时代&#xff0c;寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天&#xff0c;我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发&#xff0c;集合了丰富的旅游信息和个性化推荐功能&…...

【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 Artificial Bee Colony&#xff08;ABC&#xff09;算法是一种模仿蜜蜂觅食行为的优化算法&#xff0c;它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…...

qt获取本地语言

获取本地语言 #define QSTRING_TO_UTF8(str) std::string(str.toUtf8()) enum LanguageType {kLanguageTypeChinese,kLanguageTypeTradition,kLanguageTypeEnglish };QLocale qlLanguage;QString qstrLangCode qlLanguage.languageToString(qlLanguage.language());LOG(INFO)…...

【Spring篇】Spring中的Bean管理

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;Spring IOC容器 &#x1f6a…...

UV灯 VS LED灯,LED美甲灯是紫外线灯吗?

美甲灯是使甲油胶固化的重要工具&#xff0c;目前最常用的美甲灯一般是UV灯、LED灯以及CCFL灯。 一、不同的灯之间到底有什么区别呢&#xff1f;这次让我们好好看一下 UV灯&#xff1a; UV灯是紫外线灯管的简称。UV灯属于热阴极荧光灯&#xff0c;发出UVA&#xff08;长波紫…...

得物App3D博物馆亮相“两博会”,正品保障助力消费体验升级

近日&#xff0c;2024中国体育文化博览会、中国体育旅游博览会&#xff08;以下简称“两博会”&#xff09;在苏州国际展览中心盛大开幕。本次展会汇聚了众多国内外体育文化、体育旅游领域的顶尖企业和品牌&#xff0c;共同展示体育产业的发展成果和最新趋势。在C展馆C21展位&a…...

rancher安装并快速部署k8s 管理集群工具

主机准备 准备4台主机 3台用于k8s集群 &#xff0c;1台用于rancher 每台服务器新增配置文件 vi etc/sysctl.confnet.ipv4.ip_forward 1 刷新生效 sysctl –p 安装docker 安装的时候可以去github上检索rancher看看最新版本适配那个版本的docker&#xff0c;这里安装23.0.1…...

NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置

国标GB28181视频平台EasyCVR视频融合平台可拓展性强、视频能力灵活&#xff0c;平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析接入等功能。其中&#xff0c;在语音对讲方面&#xff0c;NVR接入录像回放平台目前…...

八、Linux 系统安全:守护你的数字堡垒

Linux 系统安全&#xff1a;守护你的数字堡垒 在当今数字化时代&#xff0c;Linux 系统因其稳定性、高效性和开源性而被广泛应用于服务器、工作站以及各种嵌入式设备中。然而&#xff0c;随着网络攻击的日益频繁和复杂&#xff0c;确保 Linux 系统的安全变得至关重要。本文将深…...

PTA数据库编程练习合集

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名…...

分布式链路追踪-01初步认识SkyWalking

一 SkyWaling是什么&#xff1f; Skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布式追踪、服务网格遥…...

openpnp - 底部相机视觉识别CvPipeLine的参数bug修正

文章目录 openpnp - 底部相机视觉识别的CvPipeLine的参数bug概述笔记openpnp的视觉识别参数的错误原因备注补充 - 如果要直接改默认的底部视觉要注意END openpnp - 底部相机视觉识别的CvPipeLine的参数bug 概述 底部相机抓起一个SOD323的元件&#xff0c;进行视觉识别。 识别…...

C#从零开始学习(接口,强制转化和is)(7)

有时根据对象能做什么来分组,而不是根据他们继承的类.这就引入了接口 让无关的类做相同的动作 接口定义一个类必须实现的方法和属性 一个类实现一个接口时,必须包含接口中列出的所有方法和属性 向下强制转化 Appliance是CoffeeMaker的基类 Appliance powerConsumer new Co…...

算法Day-8

15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元…...

屏蔽小米电视广告的方法

小米电视那个广告&#xff0c;太多&#xff0c;时间太长&#xff0c;影响观看感受&#xff0c;经过处理&#xff0c;成功屏蔽了小米电视的广告&#xff0c;提升了观影体验。 手动添加AD域名到 hosts 列表 小米(红米)电视关闭开机AD屏蔽hosts方法。 在路由器的hosts中配置。 …...

wordpress 调出编辑器/厦门百度快照优化排名

Linux Framebuffer编程实例源码介绍程序要获取Framebuffer设备的相关参数信息的话&#xff0c;就要通过ioctl()系统调用来完成。头文件中定义了所有的ioctl命令字&#xff0c;但最常用的ioctl命令字是下面这两个&#xff1a;FBIOGET_FSCREENINFO和FBIOGET_VSCREENINFO。前一个返…...

建设银行内部学习网站/小程序开发费用明细

SwiftUI 内功函数func之隐式返回函数 什么是函数 函数是执行特定任务的独立代码段。您为函数指定一个名称,该名称可以标识其功能,该名称用于“调用”该函数以在需要时执行其任务。 Swift的函数语法非常灵活,可以表达任何东西,从没有参数名称的简单C样式函数到具有每个参…...

有什么做网站优化公司/无锡网站制作优化

Spark编程入门 Scala编程 (一) 第一个scala程序 Scala编程 (二) 基本语法 Scala编程 (三)面向对象编程基础 Scala编程 (四)函数式编程基础 Spark编程(一) RDD编程...

做盗版网站引流/cpa广告联盟平台

假如有ITest.ts文件&#xff0c;如下&#xff1a; export default interface ITest{ } 这样会报错&#xff0c;编译不通过。据说是设计成这样的&#xff0c;具体详细见&#xff1a;https://github.com/Microsoft/TypeScript/issues/3194 我们可以修改为如下写法&#xff1a; in…...

商城版网站制作/万能软文模板

D3DSURFACE_DESC D3DSURFACE_DESC Desc; tex->GetLevelDesc( 0, &Desc ); Width Desc.Width; Height Desc.Height; 转载于:https://www.cnblogs.com/lancidie/archive/2011/03/16/1985788.html...

永久域名注册网站/aso苹果关键词优化

目录 背景 安装sequelize 定义配置文件 创建一个sequelize对象实例...