以下是 杨远舟 学长的笔记
todo
- swift oc 混编
- react native 和 native 兼容性建设 image -> UIImage, 大厂70%用react native
- webview 建设
做任何事情应该考虑的: 背景 -> 现状 -> 问题 -> 目标 -> 收益 技术收益。业务收益(埋点上报)
方案 长期规划
开发流程 需求上策 -> 实验控制(AB实验)-> 分析实验数据 -> 复盘,结论,优化方向
面试流程
- 自我介绍
- 提问 2.1 计算机基础知识 2.2 iOS 八股文 2.3 项目经历
- 算法题
[Homebrew] (https://brew.sh/index_zh-cn)
[Git LFS] (https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage?platform=mac)
brew install git-lfs.
a. 记得更新本地 repo
pod repo update
b. 记得更新代码
pod update
Common层,用于主工程掉用
用于展示 MarkDown 文档
系统以及扩展
孙思瑞 (@RySi Sun) QQ: 2769119954
Constants 是一个获取一些系统的东西,例如 statusBarHeight 等,请不要随意添加扩展,一定要考虑所有情况
let statusBarHeight = Constants.statusBarHeight
let systemVersion = Constants.systemVersion
UIButton+Cyxbs 是对 UIButton 的扩展,是用来布局 image 和 title 位置的代码,利用 swizzle 解决
https://blog.csdn.net/zxw_xzr/article/details/64920473 这个是利用 swizzle + runtime
https://blog.51cto.com/u_7583030/6391659 这个是利用 EdgeInsets
为什么最终还是选择 swizzle? 因为没法确定 UIButton 的大小是否会变化
let btn = UIButton()
btn.frame.size = CGSize(width: 40, height: 80)
btn.setTitle("测试", for: .normal)
btn.setImage(UIImage(named: "Test"), for: .normal)
btn.set(imageViewSize: CGSize(width: 30, height: 30), imagePostion: .top, spaceForMiddle: 5)
网络请求库
孙思瑞 (@RySi Sun) QQ: 2769119954
SessionManager 不直接使用!!!,这个类作为嫁接类,实际上请使用 HttpManager
但 SessionManager 作为扩展,你可以在里面添加一些通参,或作中间处理
并且请查看 NetError 以及 NetResponse
HttpManager 作为掉用类,里面书写了所有涉及到的API,对应后端给的所有API,集中管理!
在你写项目的时候,请参照这个模版去做
a. ** 你的API为 /magipoke-jwzx/kebiao
,那你的命名为 magipoke_jwzx_kebiao
**
b. ** 你的参数为 "stu_num": <String>
,那参数则为 (stu_num: String)
**
c. ** 如果参数不明确,可以更改你的参数传递,并书写注释或更为通俗易懂 **
@discardableResult
func magipoke_jwzx_kebiao(stu_num: String) -> DataRequest {
let parameters: [String: String] = [
"stu_num": stu_num
]
return SessionManager.shared.request(APIConfig.api("/magipoke-jwzx/kebiao"), method: .post, parameters: parameters)
}
APIConfig 是获取 API 的类
这里引入了三种环境,如果要切换云端环境,请使用 APIConfig.askCloud(success:)
去请求
APIConfig.askCloud { enviroment in
APIConfig.environment = enviroment
}
缓存管理
孙思瑞 (@RySi Sun) QQ: 2769119954
CacheManager 总的管理者,在发版之前,请检查 cleanInNextVersion
如果需要清理前一个版本的缓存,那么请把 cleanInNextVersion 设置为 true
// 创建 file,一般情况下不用掉用
CacheManager.shared.create(rootPath: .document, file: "test/test/test")
// 将一个 SwiftyJSON 对象存入
CacheManager.shared.cache(json: model, in: .init(rootPath: .document, file: "ScheduleModel/sno2021215154"))
// 取出一个 SwiftyJSON 对象
CacheManager.shared.getJOSN(in: .init(rootPath: .document, file: "ScheduleModel/sno\(scheduleModel.sno)"))
CacheManager.FilePath 路径类
创建更具 根路径RootPath 和 名字file 创建
可以利用这个类来创建文件夹
CacheManager.RootPath 根路径
因为可能涉及小组件的共享路径,所以这里单独提出来,并做扩展
extension CacheManager.RootPath {
static let document: Self = .init(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first ?? "")
}