Swift项目:新浪微博

声明:本文为博主Donkey-Tao 原创,如需转载请注明出处。

本项目使用swift3完成。

写在项目之前:

Swift中自定义LOG:在Debug环境下打印内容,但是在Release环境下不显示打印

  • 自定义标记->项目 ->buildSettings -> Swift flag -> Debug ->-D DEBUG
  • if DEBUG 和endif

1.获取所在文件:

// 1.获取打印所在的文件
let file=(#file as NSString).lastPathComponent

2.获取打印所在的方法

// 2.获取打印所在的方法
let funcName = #function

3.获取打印所在的行

// 3.获取打印所在行数
let lineNum = #line

4.整个到一个TFLog函数中,并将函数放在AppDelegae.swift中,这样可以实现整个项目中都可以用,利于团队合作。

func TFLog<T>(_ messsage : T, file : String = #file, funcName : String = #function, lineNum : Int = #line) {#if DEBUG  let fileName = (file as NSString).lastPathComponent  print("\(fileName):(\(lineNum))-\(messsage)") #endif
}

其中上面函数中的

#if DEBUG#endif可以通过TAGETS -> Build Settings -> Other Swift Flags -> Debug ->Any Architecture|Any SDK方式修改,在其中添加"-D DEBUG",表示debug环境下有这样的一个标记。加上上面的这些就可以让TFLog()打印的东西在Debug环境下显示,在Release环境下不显示。到此在项目中以后就可以使用这样的自定义的TFLog()函数作为打印调试用,以后在其他的项目中也可以直接拿过去就用。

项目的部署:OSChina

本项目采用Git管理源代码,为个人练手项目。所以,源代码开源且同时部署在GitHub和OSChina上面。

首先在OSChina上面新建项目SinaWeib。这里没有采用SSH方式实现代码的管理,而是采用HTTPS方式来进行代码的管理。https://git.oschina.net/taofei0610/SinaWeibo.git

然后将项目Clone到的我的电脑上面,打开终端进入到代码存储的目录下,使用命令Clone下OSChina上面的项目。

//用到的命令
cd /Users/taofei/Documents/TFCode/TFOSChina
git clone https://git.oschina.net/taofei0610/SinaWeibo.git
cd SinaWeibo
touch .gitignore
git add .
git commit -m "add gitignore"
git push

到此就将OSChina上面的项目Clone下来了,但是由于OSChina上面创建项目时没有swift的.gitignore,所以我们要去GiyHub中找到swift项目开发中的gitignore并将其复制后加入我们的项目中。(https://github.com/github/gitignore)

注意:一般在这里复制的.gitignore中的内容时最好将#Pods中的#去掉,这样上传时不用将CocoaPods中的文件上传,只上传Podfile中的内容

这样关于swift的.gitignore文件就在项目中了,我们需要git对其进行管理。用命令将其加入然后提交本地最后push到OSChina即可。

下面我们就可以新建swift项目放到刚才clone下来的与.gitignore同级的目录下。用Xcode创建完项目后我们就可以利用Xcode集成的Source Controller来commit,push项目代码了,当然命令行重度用户可以继续命令行也是特别好的。(此过程中第一次要输入OSChina的账号密码,直接输入就好了。)到此,项目部署完毕。

注意:这里项目名称一定要规范尽量不要出现特殊的符号

项目的基本设置

项目配置

  • 部署版本(Deployment Target):本项目支持9.0及以上版本。(Swift很多要用到的语法比较新)
  • 设备(Devices):iPhone
  • 设备方向(Device Orientation):本项目只支持竖屏。
  • 启动图片(Launch Screen Source):Use Asset Catalog.

到这里我们可以将已有的启动图片添加到项目的启动图片文件夹中了。要想尽量没有警告可以将没有用到的items移除。项目图标也是同样。

这里APP在模拟器上显示的是用们的项目名称,要想让其显示对用户比较有好多名称在项目的info.plist文件中修该Bundle name(或者Bundle display name) 后面的值为自己想要显示给用户的名称即可。我这里改为:微博。

最后设置下项目前缀(class prefix):TF

整理项目文件目录结构

加入classes文件夹,里面分为:Main,Home,Message,Discover,Profile.

注意:整理完目录结构要记得提交

纯代码初始化项目

一般现在公司用storyboard还是比较多的,苹果推出的很多技术都是storyboard相关的。本项目用纯代码来实现是为了在此过程中熟练swift开发。

既然是纯代码方式就要将Main Interface中的main去掉,然后自己在AppDelegate中创建Window。

创建窗口的跟控制器为:TFMainTabBarController,放在Main文件夹中。在AppDelegate中设置window的跟控制器时使用到TFMainTabBarController时不需要import。

首先要解决默认蓝色的tabBarItem选项的问题

//解决解决默认蓝色的tabBarItem选项图片的问题
tabBar.tintColor = UIColor.orange//或者在AppDelegate中设置tabBar的全局背景色
UITabBar.appearance().tintColor = UIColor.orange

在TFMainTabBarController中我们要添加最少五个控制器,其中四个是类似的。所以,在此我们可以重载addChildViewController方法,并将其设置为private。将具体的添加子控制器要做的事封装在这个方法中。然后在主控制器中添加这四个相似的子控制器。

当然也可以传字符串给函数,让去创建子控制器

//0.1获取命名空间,根据字符串创建控制器
let nameSpace = Bundle.main.infoDictionary!
guard let childController = NSClassFromString(nameSpace + "." + guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else{TFLog("没有获取到命名空间")return
}
guard let _ = NSClassFromString(nameSpace + "." + "TFHomeViewController")else{TFLog("根据字符串创建控制器失败")return
}
//0.2将对应的AnyClass转换为控制器类型
guard let childVCType = childController as? UIViewController.Type else{TFLog("没有获取到控制器的类型")return
}//0.3根据控制器类型创建控制器
let vc = childVCType.init()//上面通过字符串创建控制器看上去很是蛋疼,但是其实还是有用的。我们可以利用这点要根据json文件去创建控制器。
//0.0.1获取json文件的路径
guard let jsonPath = Bundle.main.path(forResource: "MainVCSettings", ofType: "json") else{TFLog("没能获取到json数据")return
}
//0.0.2读取json文件中的内容:数组->字典,要按照读取字符串的方法来读取
guard let jsonData = NSData(contentsOfFile: jsonPath) else{TFLog("没有获取到json文件中的数据--jsonData")return
}
//0.0.3将NSData类型转换为数组类型,数组以及数组中存放的字典,进行两层校验
guard let anyObject = try? JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers) else{TFLog("jsonData转anyObject失败")return
}guard let dictArray = anyObject as? [[String :AnyObject]] else{TFLog("anyObject转字典数组失败")return
}for dict in dictArray{TFLog("---------------")TFLog(dict)
}

注意:想要拿到类的名称创建控制器要加上命名空间

swift项目:微博相关推荐

  1. Swift项目引入第三方库的方法

     分类: iOS(55)  目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...

  2. swift 项目_如何对iOS项目进行静态分析

    随着项目的扩大,依靠人工codereview来保证项目的质量,越来越不现实,这时就有必要借助于一种自动化的代码审查工具:程序静态分析. 程序静态分析(Program Static Analysis)是 ...

  3. IOS swift项目的单例模式.swift5以后的单例模式

    IOS swift项目的单例模式.swift5以后的单例模式 不能继承NSObject 第一种写法,最简单 class SoundTools{static let sharedInstance = S ...

  4. swift项目 9.3以前版本模拟器运行出错

    swift项目 9.3以前版本模拟器运行出错 https://www.jianshu.com/p/0a51b79667a0 官方文档链接: https://developer.apple.com/do ...

  5. Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课

    Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课 本课程采用Q Q群直播方式进行直播,价值99元视频课程免费直播.完整的基于Swift项目实战,手把手教你做一个Swift版i ...

  6. Swift项目中不能定义OC类继承Swift类

    2019独角兽企业重金招聘Python工程师标准>>> 报错原因 Swift项目中 OC文件类  继承  Swift文件类 Cannot subclass a class with ...

  7. swift项目调用OC库 和OC项目 在swift文件里面全局调用OC库

    最近比较清闲,就把以前学习的过程记录下吧,多少年后如果能在互联网上找到自己的痕迹,想想还是一件蛮值得高兴的事情. 正好这两天加了一个swift学习群想继续学习swift,发现好多swift初学者,在混 ...

  8. swift python混合开发_引用swift项目

    iOS - OC 与 Swift 互相操作 前言 在 Swift 语言中,我们可以使用 Objective-C.C 语言编写代码,我们可以导入任意用 Objective-C 写的 Cocoa 平台框架 ...

  9. swift-从零开始(1)swift项目的创建

    最近由于工作不是太忙,想起复习一些以前接触过的知识,第一个想到的就是四年前来到公司做的swift和oc混编的项目,当初开发时候我还不会swift语言,但是因为项目紧急用了周末两天时间,简单的看了下,下 ...

  10. Spring Boot+Vue项目 微博系统(2):构建前端Vue项目

    系列目录 Spring Boot+Vue项目 微博系统 目录 系列目录 前言 一.安装Vue CLi 二.构建一个前端项目 三.启动测试 四.项目结构 五.配置 前言 前端项目可以借助 Vue CLi ...

最新文章

  1. stm32f302实现斩波控制步进电机_什么是步进电机控制器?
  2. 织梦怎么改网站主页php,无忧主机教你修改织梦DedeCms网站首页为动态显示的方法...
  3. python sqlalchemy中文手册-基于Python的SQLAlchemy的操作
  4. Camelyon Challenge: 癌症细胞区域检测竞赛
  5. 精确人工智能——核物理与粒子物理领域的新生力量
  6. eclipse tomcat内存设置
  7. oracle orber by,Oracle ORDER BY子句
  8. Linux管理文件和目录
  9. 周志华《机器学习》西瓜书第一章绪论第一部分
  10. matlab 数值积分 截断误差,几种数值积分算法误差分析(10页)-原创力文档
  11. mysql之join_mysql学习之join用法
  12. Linux查看可执行文件依赖库
  13. matlab绘制有夹角的2个平面,matlab求两向量夹角
  14. 抖音起名号项目详细步骤拆分,不懂话术怎么办?
  15. 英文科技论文写作与学术报告Lecture 4习题答案
  16. cordova build时出错Minimum supported Gradle version is 5.4.1. Current version is 4.10.3
  17. springboot jedis配置以及集群(第三篇) ubuntu16实现redis集群
  18. 【css设置滚动条粗细】
  19. 我用python做了个测词汇量的小工具
  20. android熄屏微信收到原理,求助,如何才能在息屏状态下显示收到的微信消息内容?...

热门文章

  1. adpcb 添加差分对_在AD中PCB设计常用规则——差分规则设置?
  2. Gitlab CI/CD 简单介绍
  3. poi-tl根据word模板导出word、使用spring-thymeleaf模板生成html并通过docx4j把html转word,使用jxls根据excel模板导出excel(1)
  4. 二维码在线制作免费快速
  5. 2020-10-27 史上最全最新机器人领域期刊总结
  6. python 节假日_python获取全年节假日
  7. 网络爬虫是什么意思?
  8. 利用antd进行轻量级表单开发,获取验证码
  9. SpringBoot02
  10. wmb 开发的几个坑