一、项目部署+配置

二、初始化项目

①常规初始化

class MainViewController: UITabBarController {override func viewDidLoad() {super.viewDidLoad()//1.创建TabBar第一种方法addChildViewController( "HomeViewController",  "首页",  "tabbar_home")addChildViewController( "MessageViewController", "消息",  "tabbar_message_center")addChildViewController( "DiscoverViewController",  "发现", "tabbar_discover")addChildViewController( "ProfileViewController",  "我",  "tabbar_profile")}// swift支持方法的重载// 方法的重载:方法名称相同,但是参数不同. --> 1.参数的类型不同 2.参数的个数不同// private在当前文件中可以访问,但是其他文件不能访问private func addChildViewController(_ childVcName: String, _ title : String, _ imageName : String) {// 0.获取命名空间(Swift 类名格式: 主工程.类名 - WeiBo.HomeViewController)guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {print("没有获取命名空间")return}// 1.根据字符串获取对应的Classguard let ChildVcClass = NSClassFromString(nameSpace + "." + childVcName) else {print("没有获取到字符串对应的Class")return}// 2.将对应的AnyObject转成控制器的类型guard let childVcType = ChildVcClass as? UIViewController.Type else {print("没有获取对应控制器的类型")return}// 3.创建对应的控制器对象let childVc = childVcType.init()// 4.设置子控制器的属性childVc.title = titlechildVc.tabBarItem.image = UIImage.noRenderingImageName(imageName: imageName)childVc.tabBarItem.selectedImage = UIImage.noRenderingImageName(imageName: imageName + "_highlighted")// 5.包装导航栏控制器let childNav = UINavigationController(rootViewController: childVc)// 6.添加控制器
        addChild(childNav)}}

②json文件动态初始化

class MainViewController: UITabBarController {override func viewDidLoad() {super.viewDidLoad()//2.通过json文件创建VC,动态初始化TabBarController// 1.获取json文件路径guard let jsonPath = Bundle.main.path(forResource: "MainVCSettings.json", ofType: nil) else {print("没有获取到对应的文件路径")return}// 2.读取json文件中的内容guard let jsonData = NSData(contentsOfFile: jsonPath) else {print("没有获取到json文件中数据")return}guard let anyObject = try? JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers) else {return}guard let dictArray = anyObject as? [[String : AnyObject]] else {return}// 4.遍历字典,获取对应的信息for dict in dictArray {// 4.1.获取控制器的对应的字符串guard let vcName = dict["vcName"] as? String else {continue}// 4.2.获取控制器显示的titleguard let title = dict["title"] as? String else {continue}// 4.3.获取控制器显示的图标名称guard let imageName = dict["imageName"] as? String else {continue}// 4.4.添加子控制器
            addChildViewController(vcName, title, imageName)}}// swift支持方法的重载// 方法的重载:方法名称相同,但是参数不同. --> 1.参数的类型不同 2.参数的个数不同// private在当前文件中可以访问,但是其他文件不能访问private func addChildViewController(_ childVcName: String, _ title : String, _ imageName : String) {// 0.获取命名空间(Swift 类名格式: 主工程.类名 - WeiBo.HomeViewController)guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {print("没有获取命名空间")return}// 1.根据字符串获取对应的Classguard let ChildVcClass = NSClassFromString(nameSpace + "." + childVcName) else {print("没有获取到字符串对应的Class")return}// 2.将对应的AnyObject转成控制器的类型guard let childVcType = ChildVcClass as? UIViewController.Type else {print("没有获取对应控制器的类型")return}// 3.创建对应的控制器对象let childVc = childVcType.init()// 4.设置子控制器的属性childVc.title = titlechildVc.tabBarItem.image = UIImage.noRenderingImageName(imageName: imageName)childVc.tabBarItem.selectedImage = UIImage.noRenderingImageName(imageName: imageName + "_highlighted")// 5.包装导航栏控制器let childNav = UINavigationController(rootViewController: childVc)// 6.添加控制器
        addChild(childNav)}}

三、异常处理方式

将Data转成数组

如果在调用系统某一个方法时,该方法最后有一个throws.说明该方法会抛出异常.如果一个方法会抛出异常,那么需要对该异常进行处理

在swift中提供三种处理异常的方式

方式一:try方式 程序员手动捕捉异常

               do {try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)} catch {// error异常的对象
                    print(error)}

方式二:try?方式(常用方式) 系统帮助我们处理异常,如果该方法出现了异常,则该方法返回nil.如果没有异常,则返回对应的对象

                guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {return}

方式三:try!方法(不建议,非常危险) 直接告诉系统,该方法没有异常.注意:如果该方法出现了异常,那么程序会报错(崩溃)

let anyObject = try! NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)

转载于:https://www.cnblogs.com/StevenHuSir/p/Swift_Config.html

Swit项目-初始化配置相关推荐

  1. SSM项目初始化配置示例

    SSM项目初始化配置示例 1.Spring配置 //配置类说明 @Configuration //基于aspectj的AOP支持 @EnableAspectJAutoProxy //事务支持 @Ena ...

  2. 微信小程序项目初始化配置

    微信小程序项目初始化配置 注:该文章用于记录或学习交流 文章目录 微信小程序项目初始化配置 前言 一.初始项目创建 1.微信小程序开发者工具创建初始项目 2.微信小程序全局路径配置 3.微信小程序引入 ...

  3. Vite 项目初始化配置

    创建项目: vite :中文链接 英文链接 npm init @vitejs/app 选择vue模板 创建项目 一.环境变量设置 (dev,prod) 新建 .env.development  .en ...

  4. eclipse定制化配置调优、初始化配置指南、可以解决启动慢等问题

    配置eclipse的jvm参数 打开eclipse根目录下的eclipse.ini 在最后面加上如下的jvm参数 -Xms400m -Xmx1400m -XX:NewSize=128m -XX:Max ...

  5. 前端学习(2453):项目初始化

    # 一.项目初始化## 使用 Vue CLI 创建项目> 注意:不要使用 Git Bash 执行项目创建操作,使用 cmd 或者 powershell 之类的工具.> 如果你还没有安装 V ...

  6. javaweb编辑器ckeditor配置_ckeditor编辑器在java项目中配置

    一.基本使用: 1.所需文件架包 A. Ckeditor基本文件包,比如:ckeditor_3.6.2.zip 2.配置使用 A.将下载下来的CKEditor压缩解压,将解压后的文件夹("c ...

  7. Nacos概述,下载与安装,初始化配置,服务注册应用,RestTemplate,Feign

    Idea中启动Nacos 第一步:打开服务编辑配置,例如: 第二步:添加Shell Script,例如: 第三步:添加nacos相关信息,例如: Nacos概述 Nacos(DynamicNaming ...

  8. Java从零打造企业级电商项目实战 项目初始化

    1.项目初始化 1.1 新建maven项目 (1)new project -> maven -> maven-archetype-webapp project name:mmall pro ...

  9. 项目初始化报 404 Not Found - GET https://registry.npmjs.org(转)

    转自:项目初始化报 404 Not Found - GET https://registry.npmjs.org npm install报 404 Not Found - GET https://re ...

最新文章

  1. 基于Protobuf共享字段的分包和透传零拷贝技术,你了解吗?
  2. 简单好听的id_一位妈妈给孩子的10大家规,简单实用,值得所有父母借鉴!
  3. clojure入门: hello world
  4. excel 复制数据 sql server 粘贴_数据资料复制粘贴麻烦?教你硬盘对拷资料
  5. 会产生php7内存泄露,为什么 PHP unserialize 会有内存泄露
  6. YYT 0659 - 2008全自动凝血分析仪
  7. 如何允许网页中的编辑器访问剪切板_Vditor下一代的 Markdown 编辑器,为未来而构建...
  8. mysql数据库无限分类_php+mysql数据库实现无限分类的方法
  9. 链表基础操作及其逆置
  10. 【招聘】智联NLP算法工程师
  11. 94. autoload
  12. 软考信息系统监理师 2016年3月18日作业
  13. 原生JS和NodeJS之间的区别
  14. 指数加权移动平均详解 附代码实现(全网之最)
  15. 拒绝访问,文件或目录损坏且无法读取解决办法
  16. CSS为字体添加过度色
  17. 外星人电脑装linux双系统,在外星人电脑上安装windows10和ubuntu16.04双系统小记
  18. 全方面手把手从0到1带你开发谷歌浏览器插件
  19. Ubuntu系统中使用todesk设备ID不显示问题解决
  20. [Java 内存]Java内存组成

热门文章

  1. 车载导航应用中基于Sketch UI主题定制方案的实现
  2. 2020考研大纲词汇TXT版本5500
  3. MySql不保存空缺名次排名
  4. 计算机毕业设计PHP高校自习室座位网上预约小程序(源码+程序+uni+lw+部署)
  5. java中System.currentTimeMillis
  6. HandleMessage更新UI
  7. linux安装后,ghost其他win7系统盘,无法启动的修复
  8. 未来展望:Starday供应链火力全开,为跨境电商再添动力!
  9. vs 错误LNK2019 无法解析的外部符号 __imp__PathFileExistsA@
  10. win7 去掉系统快捷方式小箭头