最近公司新开了一个项目,由于我的同事的离职,所以就剩我自己了。于是就果断的使用纯纯Swift写了,之前也用过Swift,不过很早了,那时候Swift还不稳定,每次一升级Xcode,Swift升级以后语法也跟着变了,所以就多了一堆的警告。现在Swift进化到3.X了,Swift众多新特性的支持,让我果断的要投入生产环境使用了。

这篇博客是项目上线了,可以有两天的空闲时间了,可以写写博客了,记录一下第一个Swift项目遇到的一些问题。也会顺带开源一些我写的小控件,大家可以参考或者使用一下。


Tips

1.webkit相关

内置的浏览器抛弃webview升级到了webkit,内存等各方面都要比之前好很多。不同的地方是还要实现WKUIDelegate的协议,因为alert弹窗都是需要你实现协议了,这样更能让自己的app的web部分和原生部分样式等方面的统一。不过和前端交互的时候需要我这边自定义User-Agent(UA),以确定到底是在哪打开(微信,android,其它手机浏览器?)的。WKWebView有个属性是customUserAgent,不过遗憾的是只能在iOS9.0以上使用,我还要兼容iOS8呢。

不过我喜欢把这种配置单独的在程序的某个单例里面,这样即使有多个包裹WKWebView的controller也可以统一配置(在程序启动的时候执行一下了事)。因为我还不想破坏掉原有的UA,我只是想在保留原有的UA的基础上,在符合UA规则下添加一条自定义的参数即可,毕竟完全自定义UA在访问其他站点的时候可能会有浏览器识别问题。基于这两点就踩了一个坑:

WKWebView有个方法可以获取当点的默认UA

open func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Swift.Void)? = nil)

但是因为是通过回调的方式,虽然WKWebView已经晚于设置UA好久了,还是会有不能生效的问题,只有第二次new WKWebView的对象才可以,很奇怪。无奈啊,后来想到了之前的UIWebView,在那个全局配置的单例里面通过

open func stringByEvaluatingJavaScript(from script: String) -> String?

获取设备默认的UA,然后拼接字符串,然后再通过设置

UserDefaults.standard.register(defaults: ["UserAgent": newUA])

就可以了。

2.String转Class

这次也把我之前的一篇博客的iOS controller解耦探究实现——第一次写博客OC代码用Swift重写。

这个东西的主要原理就是通过String转Class,这个要用到OC的Runtime(感觉还是离不开这种拥有魔法黑科技的Runtime啊),结果String不是单单的ClassName了,需要添加App本身的Bundle name加英文点号再加ClassName。具体的苹果官方文档有说明。示例如下:

let myPersonClass: AnyClass? = NSClassFromString("MyGreatApp.Person")

暂时就想起来了以上2个小Tips,以后想起来再做补充吧

Swift开源库

SwiftyJSON

用过Swift原生的解析json就知道了,因为Swift引入了optional,虽然使得Swift比OC更安全了,但是对于多层级的json取值简直能折磨死人。用了SwiftyJSON,感觉整个Swift的json解析再也不是问题了。强烈安利使用,看看这个库的源代码,基本也能学习不少知识呢。

Kingfisher

一个Swift的图片下异步加载缓存模块,作者也是说了受SDWebImage的启发。写的也非常棒,效果也很好。当然因为要配合我自己的一个banner轮播图控件,我修改了一下源代码(仅仅修改了图片的缓存文件夹),哈哈,我的修改版也放在了我的GitHub,在cunstom分支里面。

可以在CocoaPods这样引用就可以了

pod 'Kingfisher', :git => 'https://github.com/ysk666666/Kingfisher.git', :branch => 'custom'

PS:一开始我都用了SDWebImage了,也写了很多的逻辑了,但是后来发现了这个库后,看了一下代码,真的很棒,然后又用了一个小时把之前的逻辑都迁移到了Kingfisher 上面,

Swift App项目总结的更多相关文章

  1. swift开源项目精选

    Swift 开源项目精选-v1.0 2016-03-07 22:11 542人阅读 评论(0) 收藏 举报  分类: iOS(55)   Swift(4)    目录(?)[+]   转自 http: ...

  2. 43个优秀的Swift开源项目

    作为一门集百家之长的新语言,Swift拥有着苹果先天的生态优势,而其在GitHub上各种优秀的开源项目也层出不穷.本文作者@SwiftLanguage从2014年6月苹果发布Swift语言以来,便通过 ...

  3. 必须Mark!43个优秀的Swift开源项目推荐

    摘要:拥有着苹果先天生态优势的Swift自发布以来,各种优秀的开源项目便层出不穷.本文作者站在个人的角度,将2014年Swift开源项目做了一个甄别.筛选,从工具.存储.网络.界面.框架到Demo以及 ...

  4. 【转】43个优秀的Swift开源项目推荐

    作为一门集百家之长的新语言,Swift拥有着苹果先天的生态优势,而其在GitHub上各种优秀的开源项目也层出不穷.本文作者@SwiftLanguage从2014年6月苹果发布Swift语言以来,便通过 ...

  5. Swift 开源项目练习应用

    小的View.动画实现练习 拥有着苹果先天生态优势的Swift自发布以来,各种优秀的开源项目便层出不穷.本文作者站在个人的角度,将2014年Swift开源项目做了一个甄别.筛选,从工具.存储.网络.界 ...

  6. 400多个开源项目以及43个优秀的Swift开源项目-Swift编程语言资料大合集

    Swift 基于C和Objective-C,是供iOS和OS X应用编程的全新语言,更加高效.现代.安全,可以提升应用性能,同时降低开发难度. Swift仍然处于beta测试的阶段,会在iOS 8发布 ...

  7. Swift 开源项目精选

    Swift 开源项目精选 站在个人的角度,并基于<Swift 语言指南>,针对开源项目做了一个甄别.筛选.当然,由于个人能力及涉足范围所限,还远远不够,其中肯定有偏颇及不足,还望同学们多多 ...

  8. 我在开发第一个Swift App过程中学到的四件事

    本文转载至 http://www.itjhwd.com/wzkfyigeswiftsjs/ 译者注:本文作者Greg Heo,这是他为讲授iOS 8 App Extensions视频教程而实际使用Sw ...

  9. 必须Mark!43个优秀的Swift开源项目推荐(转)

    作为一门集百家之长的新语言,Swift拥有着苹果先天的生态优势,而其在GitHub上各种优秀的开源项目也层出不穷.本文作者@SwiftLanguage从2014年6月苹果发布Swift语言以来,便通过 ...

随机推荐

  1. 一句话告诉你JQuery $(this)到底指的是什么,怎么用

    看了网上好多关于jquery $(this)的解释,感觉都说的很模糊. 下面说出我自己的理解. this表示的是当前对象,下面以例子来说明 <!DOCTYPE html> <html ...

  2. Microsoft Windows 2003 SP2 - 'ERRATICGOPHER' SMB Remote Code Execution

    EDB-ID: 41929 Author: vportal Published: 2017-04-25 CVE: N/A Type: Remote Platform: Windows Aliases: ...

  3. flume集群日志收集

    一.Flume简介 Flume是一个分布式的.高可用的海量日志收集.聚合和传输日志收集系统,支持在日志系统中定制各类数据发送方(如:Kafka,HDFS等),便于收集数据.其核心为agent,agen ...

  4. angular.js的ui-router总结

     ui-route     先有个网址,再在这个网址下写路由   子路由的搭建   我们的布局/模板文件 index.html 我们通过建立一个主文件来引入我们所需要的所有资源以开始我们的项目 ,这里 ...

  5. H5水果机,一个网络版的lao hu ji

    该游戏为h5小游戏,纯属娱乐,技术探讨,相关技术在文章结尾,欢迎探讨交流 花了几天时间开发了这款水果lao hu ji,更新了几个版本,还有不足的地方,由于时间有限暂时没有继续更新新版本 未完成的功能 ...

  6. SQLServer树形数据结构的数据进行数据统计

    前言 前几天朋友问我,关于SQLServer数据库中对树形结构的表数据统计问题,需求大致如下: 分类表(递归数据),A的子分类是B,B的子分类是C--分类关系不间断,A为第一层,B为第二层,C为第三层 ...

  7. EntityFramework6.X之DataAnnotations

    DataAnnotations 在web开发中不仅在客户端需要执行验证逻辑,会对会对用户向表单中输入的数据给出一个即时反馈:且在服务器端也需验证逻辑,因为来自网络的信息都是不能信任的.在MVC中通常是 ...

  8. C# MVC权限验证

    前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ...

  9. CCS Debug Assertion Failed

    下载安装CCS7.1后编译工程时报错,如下: 本来以为这种情况是由于CCS没有安装成功所导致的,但尝试安装其他版本时也发生同样的问题. 于是登录到 TI的wiki 上查找原因,在安装栏下说明: Ens ...

  10. 项目管理之 SVN 管理软件 CornerStone for Mac

    常用的项目管理有 Git 和 SVN.之前公司一直使用的是 Git,使用的是 SourceTree 客户端,据说 Git 比 SVN 要好,只能说各有特点吧,有兴趣的可以查看下两个的区别. 下面是学习 ...