swift项目架构(MVC)

目录结构

├── SwiftDemo
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── Base.lproj
│ │ └── LaunchScreen.storyboard
│ ├── Config
│ │ ├── Const.swift
│ │ └── GYMoyaConfig.swift
│ ├── Controller
│ │ ├── Home
│ │ │ ├── GYHomeViewController.swift
│ │ └── Mine
│ │ ├── GYMineViewController.swift
│ ├── Helper
│ ├── Info.plist
│ ├── Model
│ │ └── GYModel.swift
│ ├── Request
│ │ ├── GYApi.swift
│ │ └── GYNetworkManager.swift
│ ├── Root
│ │ ├── GYRootNavigationController.swift
│ │ ├── GYRootTabBarController.swift
│ │ └── GYRootViewController.swift
│ └── View
│ └── Refresh
│ └── URefresh.swift

结构说明

1. AppDelegate:

1
2
3
4
5
6
7
8
9
10
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//设置 HUD 的样式
setHudStyle()
let screen = UIScreen.main.bounds
self.window = UIWindow.init(frame: screen)
let root = GYRootTabBarController()
self.window?.rootViewController = root
self.window?.makeKeyAndVisible()
return true
}

AppDelegate是应用的代理,应用级的事件都委托它处理,包含启动退出、推送等事件,以及IM、支付等第三方的回调,AppDelegate作为事件入口,这里使用 GYRootTabBarController 作为 window 打开的页面,所有的页面结构都由 GYRootTabBarController 内来实现。

2. GYRootTabBarController:

设置了 TabBarController 的 viewControllers,这里总共创建了两个 Home 和 Mine。理论上tabbar的样式修改都在这边进行。在 tabbar 的 controller 中,可以使用 controller 的 setTitle 方法,或者使用 navigationItem 的 setTitle 方法,前者可以在 tabbarItem 上显示 title,后者不会。

3. Config 文件夹:

Config 文件夹主要是工程的配置文件,其中 Const.swift 是一些 UI 相关(如颜色和屏幕长宽)的配置,GYMoyaConfig.swift 是配置请求域名的地方。

4. Model 文件夹:

存放所有工程中用到的模型,这些模型继承了 HandyJSON,使用 HandyJSON 处理模型复用

5. request 文件夹:

GYApi.swift 用来存放所有的请求接口,设置接口请求类型、请求参数、requestHeader、单元测试数据。
GYNetWorkManager.swift 封装了三个请求方法,分别是返回 error 对象和只有返回成功的方法。在这里根据业务设置 token 和 判断 Httpstatus 的成功。

6. Controllers 文件夹:

存放所有 controller 文件,其中包括每个 controller 自己的 view 和 cell(如果是 MVVM,可以放 viewModel 文件)。

7. Views 文件夹中:

存放所有复用的 view 文件。

本文代码 git 仓库。

Newer Post

移动端自适应方案(基于vue-cli)

准备工作项目基础配置使用 vue-cli 生成移动端自适应方案:阿里可伸缩布局方案 - lib-flexiblepx 转 rem 工具:px2rem,它有 webpack 的 loader:px2rem-loader 开始首先,我们使用 vue 的脚手架 vue-cli 来初始化一个 webpack …

note 继续阅读
Older Post

iOS 10前后推送的区别

处理远程推送消息的几种情况app在前台时在 iOS9 下调用:1- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 在 iOS10 下调用:123 …

note 继续阅读