Swift 3

把之前的项目适配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

你可能感兴趣的:(Swift 3)