最近公司新开了一个项目,由于我的同事的离职,所以就剩我自己了。于是就果断的使用纯纯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按钮绑定特殊事件

    本文主要介绍点击一个按钮处理事件的一些特殊情况和技巧. 一.第一次点击触发一个函数,之后点击都触发另一个函数 1.小白实现 2.大神实现 代码如下: <body> <button&g ...

  2. java文件创建和删除

    流的操作在项目开发中用的很普遍,虽然每次在网上都可以百度到,但是总感觉心里不踏实,对此,关于流的操作做一个详细的总结--- 1.根据数据的流向来分:输出流:是用来写数据的,是由程序(内存)---> ...

  3. linux服务器下安装node

    在百度上搜了好久,都没有完整的答案,好多都已经过时了!特留下此脚印 # 检查是否已经安装pythonrpm -qa | grep python# 查版本python# 最好是重新安装 Python推荐 ...

  4. mysql sql语句

    1.数据库和表的操作 创建 create修改 alter删除 drop查看 show 1.1创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name    [crea ...

  5. 【网站管理3】_ftp连接超时和连不上的原因

    1.无法上传网页,FTP故障-提示"无法连接服务器"错误. 问题出现原因:FTP客户端程序设置问题,客户上网线路问题,ftp服务器端问题.处理方法:建议客户使用CUTPFTP软件来 ...

  6. [笔记]我的Linux入门之路 - 03.Java环境搭建

    其实ubuntu是自带一个叫openJDK的东西的,是谷歌看Oracle不爽而搞的.不过呢...总感觉不太习惯,况且我既然都来Linux了,总是想折腾一把的. 首先先检查下有没有安装java.终端输入 ...

  7. 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

    相关文章目录: 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean 开源框架是如何通过JMX来做监控的(二) - Druid连接池的监控 相信很多做Java开发的同 ...

  8. anjular中Service、Factory、Provider的使用与js中创建对象的总结

    在学习anjular中Service的使用时,发现和js中的创建对象的方式有一定的联系,所以总结了anjular中Service.Factory.Provider的使用方式与js创建对象的方式 一.先 ...

  9. 状态(State)模式

    状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的 ...

  10. js实用方法记录-简单cookie操作

    js实用方法记录-简单cookie操作 设置cookie:setCookie(名称,值,保存时间,保存域); 获取cookie:setCookie(名称); 移除cookie:setCookie(名称 ...