Swift 掌控Moya的网络请求、数据解析与缓存
Moya 在Swift开发中起着重要的网络交互作用,但是还有不如之处,比如网络不可用时,返回的 Response 为 nil,这时还得去解析相应的 Error
Codable 可以帮助我们快速的解析数据,但是一旦声明的属性类型与json中的不一致,将无法正常解析; 而且对于模型中自定义属性名的处理也十分繁琐
+
Moya 在Swift开发中起着重要的网络交互作用,但是还有不如之处,比如网络不可用时,返回的 Response 为 nil,这时还得去解析相应的 Error
Codable 可以帮助我们快速的解析数据,但是一旦声明的属性类型与json中的不一致,将无法正常解析; 而且对于模型中自定义属性名的处理也十分繁琐
解决的方案有很多,不过我比较习惯使用 MoyaMapper ,不仅可以解决上述问题,还提供了多种模型转换、数据互转、多种数据类型任意存储的便捷方法。掌控Moya的网络请求、数据解析与缓存简直易如反掌。
MoyaMapper是基于Moya和SwiftyJSON封装的工具,以Moya的plugin的方式来实现间接解析,支持RxSwift
GitHub: ...
Swift 优雅的适配大小
在日常开发中常常会对设备进行一定的适配,为了方便在多个项目里统一管理和使用,所以封装并开源了SwiftyFitsize这个库,可用于适配视图及字体大小,同时也支持 xib 和 storyboard
GitHub: SwiftyFitsize
+
在日常开发中常常会对设备进行一定的适配,为了方便在多个项目里统一管理和使用,所以封装并开源了SwiftyFitsize这个库,可用于适配视图及字体大小,同时也支持 xib 和 storyboard
GitHub: SwiftyFitsize
最终的效果如下图所示
安装使用Cocoapods安装,或手动拖入项目1pod 'SwiftyFitsize'
使用SwiftyFitsize在默认状况下所使用的参照宽度为iphone6的375如果设计图所选用设备的宽度与默认值不同,可以在AppDelegate下初始化所参照的宽度
1SwiftyFitsize.reference(width: 414)
下面列出一些设备对应的分辨率,方便查找
设备
逻辑分辨率(point)
设备分辨率(pixel)
SE
3 ...
iOS-面向协议封装全屏旋转功能
关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS-面向协议方式封装空白页功能】,这里就不再赘述,我们直接进入使用阶段吧。本篇文章只有一个目的,那就是只要遵守协议,一行代码随意切换全屏~
如果对面向协议有疑问的同学可以看下我之前的两篇文章
iOS - Swift 面向协议编程(一)
iOS - Swift 面向协议编程(二)
+
关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS-面向协议方式封装空白页功能】,这里就不再赘述,我们直接进入使用阶段吧。本篇文章只有一个目的,那就是只要遵守协议,一行代码随意切换全屏~
如果对面向协议有疑问的同学可以看下我之前的两篇文章
iOS - Swift 面向协议编程(一)
iOS - Swift 面向协议编程(二)
开源库
Name
Link
GitHub
LXFProtocolTool
Wiki
Wiki首页
本文 Demo
LXFFullScreenable
使用Cocoapods的方式来安装即可
1pod 'LXFProtocolTool/FullScreenable'
一、配 ...
AppRTC实战
记录AppRTC的搭建过程,实现iOS、Android、Browser同异设备的视频通信
1、记录AppRTC的搭建过程,实现iOS、安卓、browser同异设备的视频通信2、以下直接以root身份进行操作,所有的需要下载的文件均放置于/root目录下,需要的话,可以自行决定存放位置,但是要注意修改相关的配置路径~
一、设备配置
阿里云ESC服务器 Ubuntu 16.04 64位
腾讯云域名
二、相关环境1、JDK123add-apt-repository ppa:openjdk-r/ppa apt-get update apt-get install openjdk-8-jdk
2、nodejsnodejs官网123// 这里的版本8.x可以按自己的需求去修改curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -apt-get install -y nodejs至此已经安装了最新版的nodejs和npm了,可以使用-v来查看当前版本
12node -vnpm -v
安装grunt-cli,后面需 ...
打造Moya便捷解析库,提供RxSwift拓展
MoyaMapper是基于Moya和SwiftyJSON封装的工具,以Moya的plugin的方式来实现间接解析,支持RxSwift
+
一、概述1、相信大家在使用Swift开发时,Moya是首选的网络工具,在模型解析这一块,Swift版模型解析的相关第三方库有很多,本人最习惯用的就是SwiftyJSON。
2、下面会开始讲解整个主要的开发功能与思想。
3、以下内容是基于大家会使用Moya和SwiftJSON的前提下所著,还不会的同学可以先简单了解后再来阅读本篇文章哦~
二、功能开发与思想讲解1、尝试模型解析Moya请求服务器返回的数据以Response类返回给我们,那我们就给Response类做一个扩展,这里以解析模型为例1234567// 需要传入一个参数,告知我们要转换出什么模型public func mapObject<T: Modelable>(_ type: T.Type) -> T { // 模型解析过程 。。。 return T}
Q: 那中间的解析过程该怎么写呢?
A: 可以让开发者遵守某个协议,实 ...
iOS-面向协议方式封装空白页功能
为了良好的交互体验,相信大家在对待scrollView无数据时的提示页都会使用一些第三方来定制,最典型的就是使用DZNEmptyDataSet。但是每个界面都写一堆与DZNEmptyDataSetDelegate,DZNEmptyDataSetSource相关的代码就不太好,那一般情况下自然的就会采用继承的方式来避免。而Swift除了可以面向对象编程,它还可以面向协议编程。那可不可以也用协议来解决情况呢?嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上述情况,并且实现一行代码添加空白页功能
+
为了良好的交互体验,相信大家在对待scrollView无数据时的提示页都会使用一些第三方来定制,最典型的就是使用DZNEmptyDataSet。但是每个界面都写一堆与DZNEmptyDataSetDelegate,DZNEmptyDataSetSource相关的代码就不太好,那一般情况下自然的就会采用继承的方式来避免。而Swift除了可以面向对象编程,它还可以面向协议编程。那可不可以也用协议来解决情况呢?嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上 ...
iOS-组件化开发(四):fastlane实现pod自动化
在第一次组件化的时候,需要执行很多操作,这些操作可以在【iOS-组件化开发(一):远程私有库的基本使用】,这里就不再赘述,在组件化后的重复性操作就是升级,而升级这个过程是一模一样的。那么,我们有什么办法可以很方便的搞定这一过程来节约我们大量的时间呢?
+
在第一次组件化的时候,需要执行很多操作,这些操作可以在【iOS-组件化开发(一):远程私有库的基本使用】,这里就不再赘述,在组件化后的重复性操作就是升级,而升级这个过程是一模一样的。那么,我们有什么办法可以很方便的搞定这一过程来节约我们大量的时间呢?
一、升级必备操作修改完核心代码后,一共还需要做以下几步:1、修改spec文件(修改s.version,s.description等)2、pod install (使Example与pod下来的库产生关联)3、提交本地仓库代码至远程仓库4、打标签,并提交至远程5、验证spec,并提至私有索引库
二、Fastlane1、简介Fastlane文档说明 Fastlane是一个ruby脚本集合,它可以按照我们指定的路线,在指定位置执行我们所要执行的操作。这里我们称这样的路线为「航道 ...
iOS-组件化开发(三):加载资源文件
经过前两篇文章的学习,相信对组件化开发有了大致的了解,那我们这篇文章就来讲讲资源文件的加载吧
+
经过前两篇文章的学习,相信对组件化开发有了大致的了解,那我们这篇文章就来讲讲资源文件的加载吧
这里我新建了一个LXFMain组件库,主要是用来显示TabBar的玩意,然后再进行组件化抽离出来,其中的过程这里不再赘述,还没了解过的同学建议先阅读下这两篇文章吧
iOS-组件化开发(一):远程私有库的基本使用
iOS-组件化开发(二):远程私有库的更新与子库
这里跟之前不一样的地方在于多了图片资源,组件的核心代码放在Classes文件夹中,而图片我们则存放于Assets目录下,如图所示
一、修改Spec将关于资源加载的注释去掉1234s.resource_bundles = { # 'LXFMain' => ['LXFMain/Assets/*.png'] 'LXFMain' => ['LXFMain/Assets/*'] ...
iOS-组件化开发(二):远程私有库的更新与子库
在上一篇【iOS-组件化开发(一):远程私有库的基本使用】中我们已经实战了远程私有库的基本操作,但是组件不可能上传一次就完事了,随着业务的增加,我们的组件可能还需要添加更多的东西,或者修复一些问题,这就需要我们对私有库代码进行升级与维护
+
在上一篇【iOS-组件化开发(一):远程私有库的基本使用】中我们已经实战了远程私有库的基本操作,但是组件不可能上传一次就完事了,随着业务的增加,我们的组件可能还需要添加更多的东西,或者修复一些问题,这就需要我们对私有库代码进行升级与维护
这里以对基础组件里添加了一个Cache工具为例
添加完成后我们需要更新到远程仓库
一、更新远程仓库cd 到本地仓库的位置,执行以下操作
1、代码更新123git add .git commit -m '更新描述'git push origin master
2、版本更新版本更新 这一步非常重要,为更新索引库做准备
12git tag -a '新版本号' -m '注释'git push --tags
查看远程仓库,标签数已经有2个了,点进去就可以看到 ...
iOS-组件化开发(一):远程私有库的基本使用
随着项目功能的不断增加,越来越多的开发人员加入,业务主线也随之越来越多,造成耦合越来越严重,编译越来越慢,测试不独立等一系列问题。为了解决此类情况,我们可以考虑到使用组件化开发
+
随着项目功能的不断增加,越来越多的开发人员加入,业务主线也随之越来越多,造成耦合越来越严重,编译越来越慢,测试不独立等一系列问题。为了解决此类情况,我们可以考虑到使用组件化开发
1.概念组件化就是将一个单一工程的项目, 分解成为各个独立的组件, 然后按照某种方式, 任意组织成一个拥有完整业务逻辑的工程。
2.优势
独立:独立编写、编译、运行、测试
重用:功能代码的重复使用。比如不同项目使用同一功能模块
高效:任意增删模块,实现高效迭代
组件化还可以配合二进制化, 提高项目编译速度
3.组件分类大体上分三类:基础组件、功能组件和业务组件
基础组件:也称为公共组件,存放平时定义的宏、常量、协议、分类、对必要的第三方的封装类,以及各种处理工具类,如:时间、日期、设备信息、文件处理、沙盒管理等
功能组件: 自定义视图控件、一些特定功能的封装(如录音、播放音频封装)
业务组件:各种业务线
...