把之前的项目适配Swift3。满满的恶意。
dispatch_once
在使用swizzle的时候一定会用到,但是在3中,这个方法被禁用了,建议我们使用全局懒加载。看了好久才摸索出来
The free function dispatch_once is no longer available in Swift.
In Swift, you can use lazily initialized globals or static properties and get
the same thread-safety and called-once guarantees as dispatch_once provided.
Example:
let myGlobal = { … global contains initialization in a call to a closure … }()
_ = myGlobal // using myGlobal will invoke the initialization code only the first time it is used.
好吧,根据苹果的说明,其实很简单,dispatch_once的方法之后将不再为Swift提供使用了,当然,也给了我们例子。
不过在使用时,建议加上void,不然有warning
private let once: Void = {
}()
_ = once
NSRange range
还有就是遇到了NSRange转成range的方法,之前查了好久用了一系列的法子去转换,今天发现还有个更简单的。
var nsString = textField.text! as NSString
nsString = nsString.replacingCharacters(in: range, with: string) as NSString
var finalString = String(nsString)
NSString对应的方法还是使用的NSRange,而String对应的方法使用的是Range,所以我们可以直接使用NSString进行操作后再变成String。
UITableView
tableview初始化如果选用了grouped,头部会出现空档,设置heightForHeaderInSection也没有效果,不知道是不是bug