在Swift中使用构建者模式
发表于|更新于
|浏览量:
在Swift中使用构建者模式
和编程中其他的抽象和模式一样,构建者模式的目的是减少以保持可变状态——从而使对象更简单、且更容易预测。对象变得“少状态”,就会容易测试和调试——因为他们逻辑只存在单纯的输入输出。
尽管构建者模式在java中十分常见,然而在苹果平台上却很少遇到(至少和构建对象不同)。这周,我们来看一下,构建者
文章作者: 今是昨非
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 今是昨非的博客!
相关推荐
2016-01-04
轮播图实现的三种方式
轮播图实现的三种方式假设有5张图片,分别是:12345,实现轮播图 方法1:用scrollView加NSTimer实现,思路:12345五张图片,实现轮播,我添加两张,变成5123451,当滑到最后一个1时,无动画位移回第一个1;当倒着滑到5时,无动画回最后的5。 难点在于:给定数组的个数,及两个边界的判断 方法2:用collectionView加NSTimer实现,思路:12345五张图片,对应collectionView的1个section,即一个section有5个row;至于有多少个section,尽量设置的大一些,eg:100;(collectionView有重用机制)所以不用担心内存问题。 难点在于:滑动的逻辑处理;如果你把section设置的非常大,就不用担心倒着滑的问题,毕竟不是每个人都那么闲。 1234567891011121314151617181920- (void)nextPage:(id)sender { // 1. 得到当前正在显示的cell的indexPath,(只有一个) NSIndexPath *currentI...
2020-09-21
RN布局
RN布局背景今年以来,公司新来的总监力推ReactNative,目标是做大前端,H5选用React,客户端用ReactNative,所以我要再“复习”一下网页布局。顺便把内容记录到自己的博客中,用宝儿姐的话来说:“机智的一bi”。 内容Flex布局:Flex是Flexible Box的缩写。设为Flex布局之后,子元素的float、clear、和verti-align属性将失效。 容器属性: 经常设置在容器上的属性有: 123456flexDirection // 主轴的排列方向flexWrap // 沿主轴排不下的时候,如何换行justifyContent // 项目在主轴上的排列方式alignItems // 项目在交叉轴上的排列方式alignContent // 多根轴线的对齐方式。如果只有一根轴线,该属性不起作用alignSelf // 允许单个项目有与其他项目不一样的对齐方式,可覆盖alignItems属性 每个属性的可设置的值如下: 123456flexDirection: 'colu...
2019-09-15
批量图片压缩 & 替换
批量图片压缩 & 替换背景最近产品提了个需求,要求把包压缩一下,而项目是OC&Swift混编,这期还加上了RN,还要包不能增大。脑壳疼。。。。他则不上天呢。但需求出来了,还是要做的。所以就想了下面几个方法: 先用LSUnusedResources分析项目中无用的图片和类,删除; 然后对项目中的图片进行压缩替换; 再接着分析linkMap文件,找出大的文件进行优化。 基于clang插件的一种iOS包大小瘦身方案 实现这篇就是关于第二步的,项目里大约有1600多张图片,之前几次压缩都是按大小排序,然后把大于10kb的图片一个个上传到tinypng上压缩,再下载替换。tinypng web最多支持一次20张,每次上传压缩,然后等,就问问烦不烦。。。。 图片批量压缩so,这次我终于受不了,我要找批量压缩的,还真给我搜到了图片批量压缩脚本(Python),这种使用方式GitHub上已经写得很清楚了,每月可以500张批量压缩,然后有一个输出文件夹: 使用这个脚本的时候,要注意: 安装Python 安装click和tinify 到此处申请 API key: https...
2022-09-05
Carthage使用
背景之前一直用CocoaPods,这次做编译时间优化时,把某些Pod依赖的库改为了Carthage依赖的,这里记录一下Carthage的使用。 使用安装使用brew安装,简单方便 1brew install carthage 使用在项目所在文件夹,即.xcodeproj所在的文件夹下,创建Cartfile 1touch Cartfile 然后打开Cartfile 1open Cartfile -a Xcode 添加要依赖的第三方库,注意依赖版本的指定,指定版本和指定范围的写法,如下: 1234567891011github "krzyzanowskim/CryptoSwift" ~> 1.4.0github "evgenyneu/keychain-swift" ~> 19.0github "ibireme/YYKit"github "ReactiveX/RxSwift" "6.5.0"github "onevcat/Kingfisher" ...
2016-01-07
MagicalRecord的使用
创建数据库1. 首先分析清楚自己需要什么 我的目的是要缓存信件列表界面,新建列表界面的model就是letter,所以我需要一个Letter的实体(entity),那这个Letter有哪些属性呢?写信的人(sender)、信的内容(content)、信的时间(dateString)、信的已读未读状态(isRead)、发信还是收信(incoming);所以我Letter的entity创建之后是这样: 这样就好了吗,并没有,如果是普通的展示界面,只有letter的实体,这样就足够了;但是对于我的这个项目来说,是展示信件的,是比较私人的,我缓存的信件列表应该只有我能看到,如果别人在我的手机上登陆了呢?因为我没有做区分,所以,当他登入的时候,他能看到我的数据,因为数据是缓存在手机上的! 所以,我需要一个User的Entity,这个User的Entity的目的是:跟Letter绑定,保证每个人都看到自己应该看到的;user有两个attribute:accout和writeName,(正常情况下应该是uid,但是我的这个是比较简单,所以没有uid); 紧接着问题是,Let...
2024-12-04
全平台抓包工具Reqable使用
背景在iOS开发中,经常会遇到需要抓包的情况,比如查看网络请求、查看接口返回的数据等。而在iOS开发中,常用的抓包工具有Charles、Proxyman等,这些并非不好用,尤其是Proxyman,使用起来非常方便。但是需要付费,免费的只能查看3个域名;而且这些工具使用的时候需要手动进入网络中设置代理,比较麻烦。 无意中发现了Requable,优点是:全平台可用,且抓包功能免费,没有广告;最好用的是可以在手机上一键连接电脑,不需要进入网络设置代理,非常方便。优点: 全平台,iPhone、Mac、Windows、Android都有APP 抓包免费,不限制域名数量 可以在手机上一键连接电脑,不需要进入网络设置代理 可以查看请求头、请求体、响应头、响应体,设置断点,拦截修改返回和相应;(免费版最多生效3个) 缺点:VPN的开启和关闭标识不够明显,在使用过程中容易被误操作。 使用以Mac版本来看,如下图,主要有以下几个部分: 区域1,导航部分,在这里可以看到所有的域名,可以选择对指定的域名置顶或添加书签,单击选中时后面会有绿色的勾,代表过滤这个域名;选中多个,则过滤多个;没有选...