Skip to content

Latest commit

 

History

History
220 lines (119 loc) · 4.46 KB

掌邮工具类.md

File metadata and controls

220 lines (119 loc) · 4.46 KB

掌邮工具类


以下是 杨远舟 学长的笔记

todo

  1. swift oc 混编
  2. react native 和 native 兼容性建设 image -> UIImage, 大厂70%用react native
  3. webview 建设

做任何事情应该考虑的: 背景 -> 现状 -> 问题 -> 目标 -> 收益 技术收益。业务收益(埋点上报)

方案 长期规划

开发流程 需求上策 -> 实验控制(AB实验)-> 分析实验数据 -> 复盘,结论,优化方向

面试流程

  1. 自我介绍
  2. 提问 2.1 计算机基础知识 2.2 iOS 八股文 2.3 项目经历
  3. 算法题

Pod

[CocoaPods]

新Mac装CocoaPods

brew install git-lfs.

pod install

a. 记得更新本地 repo

pod repo update

b. 记得更新代码

pod update

记录

Common

Common层,用于主工程掉用

MarkDownViewController

用于展示 MarkDown 文档

Constants

系统以及扩展

孙思瑞 (@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)

NetWork

网络请求库

孙思瑞 (@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
}

CacheManager

缓存管理

孙思瑞 (@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 ?? "")
}