美文网首页
Swift3.2升级Swift4.0

Swift3.2升级Swift4.0

作者: craig_wang | 来源:发表于2017-10-31 18:12 被阅读21次

    如下是我在升级中的步骤,可以发现修改并不是很大,相信各位也能愉快的升级(整个过程耗时3个小时左右)

    1. Xcode 9 的 File -> Project Settings -> 开启 New Build System(Preview)<不开启也没关系,官方说是更快了>

    2. Build Settings -> Swift Language Version -> 修改为4.0 (工程 Tests UITests都需要主动修改<发现Xcode无法自动修改,提示转化错误>)

    解决错误

    • 扩展里面的方法不能重写(父类方法如果要被重写就不能在写在扩展里,同时子类不能在扩展里重写)

    • 富文本问题:<字符串key,被NSAttributedStringKey枚举替换> 修改如NSForegroundColorAttributeName -> NSAttributedStringKey.foregroundColor 直接fix就可以解决

    • #selector 1. 函数调用 添加@objc。 2 .如果方法在闭包里面,需要明确对象(添加self)如 #selector(self.verify())

    解决警告

    • Timer scheduleRepeating 函数失效 -> schedule(deadline ......

    • substring -> NSRange -> Range -> String:

    
    let string ="Hello world"
    let startIndex = string.startIndex
    let range = startIndex...
    
    let nsRange =NSRange(range, i: string)
    if let strRange = Range(nsRange, in: string) {
        let sub = String(string[strRange]) /// 这里写法有点啰嗦,如有更好的写法(不要有警告,不强转NSString),请指教
    }
    
    • KVO 旧的写法,已被新的闭包实现方式替换,代码如下:
    let obj =Obj() /// 类
    /// 下面是kvo obj对象的age属性,这里是swift4.0 keyPath语法,详细介绍请参考文档
    /// age需要@obj修饰,确保是动态的。如果是框架的对象属性,可以直接kvo,比如UIScrollView 的contentOffset
    
    let observation = obj.observe(\.age, options: [.new]) { (obj, change) in
        if let newValue = change.newValue {
        }
    }
    observation.invalidate() /// 取消kvo
    

    相关文章

      网友评论

          本文标题:Swift3.2升级Swift4.0

          本文链接:https://www.haomeiwen.com/subject/vmzbpxtx.html