iOS Swift4项目EFarm学习和总结
2017-09-22 00:00
330 查看
摘要: 这个项目是Swift 零基础开始, 所以有大量的Swift基础语法介绍, 除此之外也会包含一些封装的示例, MVVM的用法, 同时也包含项目优化的理解和看法
码云地址
项目的简单介绍
###一步一步创建一个标准的iOS项目模板
第一个swift类
在从github和码云上浏览了几个Swift项目之后我开始了自己的尝试.
例如 翔妖除魔 / ZhiHuDaily-Swift
例如 LinXunFeng / LXFWeChat
开始动手时候却发现Swift和OC很是不一样, 不知道swift的成员变量怎么"声明", oc中常用的类别, 类方法成员方法等等
swift变量有两种类型 : 存储变量 和 计算变量
swift默认就是在其他地方可以访问的, 相当于oc中.h的变量
使用private那么只能在当前类使用, 同一swift文件也不可以
使用fileprivate在一个swift文件可以访问
例如上边的"shareSingleton"静态变量就是Swift中标准的单例写法了, 具体可以查看上边的链接了解
参考资料
delegate方法写在扩展哩
所以只需要创建一个swift文件专门用于存储这些就可以了
现在结构体里的属性也可以单独设置了,
1.创建一个.h文件
2.BuildSeting修改Objective-C Bridge Header的值为创建的文件, 拖过去即可(推荐使用"$(SRCROOT)"标记相对路径)
注意swift方法开放给oc要使用"@objc"标志
反朴归真,使用系统的nav或tab,体检更好
使用wkwebview代替uiwebview,体验更好
简单适配3dtouch, peek/pop让你的项目体验更好
然后发现系统设置的table也卡出了翔(iOS11.0的iPhone 设置->移动蜂窝网络), 苹果生动的当了一次反面教材.
cell高度预先计算
cell使用不同identifier, cellForRow应该只有一个赋值操作
特别复杂, 没法使用2的话可以采用绘制方法, github有很多轮子可以去研究一下
iOS11, 比较得注意会直接影响界面的就是 安全距离 和 tableView问题, tableview现在必须returen header和footerView
iPhone X:
X 的人机交互指南
在iPhone X系统会自动修改StatusBar与Tabbar的高度,Tabbar从49pt变为83pt。StatusBar由20pt变为了44pt, 打电话和wifi状态栏不会增高。
至此, 这篇博客就结束了, 整体来说Swift写起来并没有那么可怕, 有些地方比OC方便不止一点, 如果swift库找不到也可以使用混编方式, 而且3到4.0变化也不多了,是时候尝试开始Swift了
感谢各位赏脸😄
Swift项目
先上一个码云地址码云地址
项目的简单介绍
Constant 模块 AppUrl : 定义url静态变量 PublicConstant : 定义cellidentifier, ScreenWidth等变量, BaseColor等变量, 封装view的一些属性(.width等), UIDevice分类判断iPhone X MianCode 模块 各个模块 每个模块分位四块:controller(界面跳转,view切换), control(数据下载, 解析model), model(model申明), cell(view) General 模块 UserInfo : 示例封装set/get UserDefaults RootController : 封装侧滑界面 (这是本项目的第一个类, 也是我开始学习swift的第一个类, 包含基本语法的注释) Library 模块 示例使用OC混编, 没有使用CocoaPod的第三方库 包括 : MJRefresh, DZNEmptyDataSet 等 Resouce 模块 图片文件 Config模块 项目初始文件 Pod 'Alamofire' 网络请求 'SwiftyJSON' Json解析 'Kingfisher' image缓存 'PKHUD' 加载动画
项目编写过程和一些知识点
这个项目从Xcode的singleView模板创建而来, 经过文件整理归类和修改创建了一个标准易于维护的最终模板, 你可以通过以下链接学习###一步一步创建一个标准的iOS项目模板
第一个swift类
在从github和码云上浏览了几个Swift项目之后我开始了自己的尝试.
例如 翔妖除魔 / ZhiHuDaily-Swift
例如 LinXunFeng / LXFWeChat
开始动手时候却发现Swift和OC很是不一样, 不知道swift的成员变量怎么"声明", oc中常用的类别, 类方法成员方法等等
1. Swift变量
参考资料关于Swift 你可能连变量都不会定义swift变量有两种类型 : 存储变量 和 计算变量
存储变量
用于给一个对象增加属性, 可以在创建的时候就赋值(table)// 例如某个model的一个"属性" let title : String //例如vc的tableView let tableView : UITableView = { let table = UITableView.init(frame: CGRect.init(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight), style: UITableViewStyle.grouped) table.backgroundColor = BackColor //这个时候创建时候self还没有初始化完成,不能self.addsubview return table }()
计算变量
用于监听变量值变化的时候执行相应的操作//userInfo本地保存用户相关 class UserInfo: NSObject { //计算属性 static var UserName : String? { //获取值,可能没有代码提示 get{ return UserDefaults.standard.value(forKey: UserNameKey) as? String } //设置值 set(arr){ UserDefaults.standard.set(arr, forKey: UserNameKey) } } }
2. 实例方法(变量)和类型方法(变量)
参考资料 实例方法和类型方法swift默认就是在其他地方可以访问的, 相当于oc中.h的变量
使用private那么只能在当前类使用, 同一swift文件也不可以
使用fileprivate在一个swift文件可以访问
class RootController: UIViewController { // MARK: - 单例写法 //单例/类成员变量,只读,访问获取单例 static let shareSingleton = RootController(); // MARK: - 外部变量,外部可以赋值 //main vc var mainVC : UIViewController = UIViewController() { didSet { //此时mainVC已经有值,做一些处理 } //private修饰的内部变量 private var leftView : UIView = { let view = UIView.init(frame: CGRect.init(x: 0, y: 64, width: 20, height: ScreenHeight-64)) return view }() }
3. 单例写法
参考资料单例写法例如上边的"shareSingleton"静态变量就是Swift中标准的单例写法了, 具体可以查看上边的链接了解
4. Swift命名和代码风格, 避免OC风格的代码
简单了解一些之后, 就需要看看swift代码怎么写才更好, 好的代码 看起来总是赏心悦目的参考资料
Swift命名和代码风格
5. 类别扩展(Extension)
参考资料类别扩展(Extension)delegate方法写在扩展哩
为系统类扩展方法
public extension UIView { //只读属性, 不写set就是只读 var left : CGFloat { get{ return self.frame.origin.x } // set{ // } } //上述方式的简写 var right : CGFloat { return self.frame.origin.x + self.frame.size.width } }
6. 宏/全局静态变量
因为swift开放的属性所有类内部都可以访问无需引用头文件所以只需要创建一个swift文件专门用于存储这些就可以了
import UIKit //无参宏其实就是静态变量 let identifierTitle = "TableViewCellIdentifierTitle" let ScreenWidth = UIScreen.main.bounds.size.width let DetailColor = UIColor.init(red: 153/255.0, green: 153/255.0, blue: 153/255.0, alpha: 1) //带参宏是没有了, 就用全局方法替代 public func ColorRGB(_ r: Int, _ g: CGFloat, _ b: CGFloat) -> UIColor { return UIColor.init(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: 1) } //也可以使用上边 5.代码中的这种写法标记只读 var ConfigTabHeight : CGFloat { return 120 }
7. CGRect、CGSize和CGPoint
参考资料CGRect、CGSize和CGPoint现在结构体里的属性也可以单独设置了,
view.frame.size.width = 100
8. Swift与oc混编
步骤十分简单, 排除第一次自动创建, 手动创建可以通过一下步骤:1.创建一个.h文件
2.BuildSeting修改Objective-C Bridge Header的值为创建的文件, 拖过去即可(推荐使用"$(SRCROOT)"标记相对路径)
注意swift方法开放给oc要使用"@objc"标志
//因为OC类NJRefresh调用,所以使用@objc开放给OC类 @objc private func configData() -> Void { }
9. CocoaPod使用
像oc一样,导入之后在用到的地方导入头文件即可使用import PKHUD
10. 其他的,凑个10
其他一些项目建议:反朴归真,使用系统的nav或tab,体检更好
使用wkwebview代替uiwebview,体验更好
简单适配3dtouch, peek/pop让你的项目体验更好
TableView优化
起因手机更新iOS11之后发现首页tab滑动更加卡了, 于是查看了头条, 腾讯视频都发现好像确实没有10流畅.然后发现系统设置的table也卡出了翔(iOS11.0的iPhone 设置->移动蜂窝网络), 苹果生动的当了一次反面教材.
cell高度预先计算
cell使用不同identifier, cellForRow应该只有一个赋值操作
特别复杂, 没法使用2的话可以采用绘制方法, github有很多轮子可以去研究一下
//table优化 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { //这个方法会在加载cell反复调用, 不要进行耗时操作 let model : HomeModel = homeData.news![indexPath.row] return model.cellHeight } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let model : HomeModel = (homeData.news?[indexPath.row])! //也要尽量精简 //不同的cell一定要设置不同的identifier var cell : HomeTableCell = HomeTableCell() if model.cellHeight == 80 { cell = tableView.dequeueReusableCell(withIdentifier: identifierTitle) as! HomeTableCell cell.setTitleView(model: model) } if model.cellHeight == 120 { cell = tableView.dequeueReusableCell(withIdentifier: identifierOnePic) as! HomeTableCell cell.setOnePicView(model: model) } if model.cellHeight == 140 { cell = tableView.dequeueReusableCell(withIdentifier: identifierThreePic) as! HomeTableCell cell.setThreePicView(model: model) } if !cell.isSetTouch { if #available(iOS 9.0, *) { if self.traitCollection.forceTouchCapability == UIForceTouchCapability.available { self.registerForPreviewing(with: self, sourceView: cell) } } cell.isSetTouch = true } return cell }
iOS11和iPhone X
参考资料适配11iOS11, 比较得注意会直接影响界面的就是 安全距离 和 tableView问题, tableview现在必须returen header和footerView
iPhone X:
X 的人机交互指南
在iPhone X系统会自动修改StatusBar与Tabbar的高度,Tabbar从49pt变为83pt。StatusBar由20pt变为了44pt, 打电话和wifi状态栏不会增高。
至此, 这篇博客就结束了, 整体来说Swift写起来并没有那么可怕, 有些地方比OC方便不止一点, 如果swift库找不到也可以使用混编方式, 而且3到4.0变化也不多了,是时候尝试开始Swift了
感谢各位赏脸😄
相关文章推荐
- 奔五的人学IOS:swift练手与csdn,最近学习总结
- 创建IOS项目—学习总结
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
- iOS: 学习笔记, Swift与Objective-C混用总结
- iOS开发——完整项目实战Swift篇&百思不得姐Swift版总结(一)
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
- ios学习总结(1) -- 创建第一个ios项目
- ios学习笔记:从Java转ios项目总结
- iOS开发——完整项目实战Swift篇&百思不得姐Swift版总结(三)
- ios学习总结(1) -- 创建第一个ios项目
- ios项目 学习总结
- 【IOS 开发学习总结-OC-38】★ios入门 ——ios项目基础之知识点拾贝
- 【极客学院】-iOS学习笔记-5-Swift(变量,循环,控制,函数,面向对象,小项目:呈现网页)
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
- iOS开发——完整项目实战Swift篇&百思不得姐Swift版总结(二)
- 奔五的人学IOS:swift练手与csdn,近期学习总结
- ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)
- 学习笔记之maven2学习总结(3,maven2在淘宝项目的应用)
- 项目管理学习笔记之七沟通管理过程总结