迁移 Swift 4

直接可以参考官方的文档即可:https://swift.org/migration-guide-swift4/

简单记录我的步骤:

  1. 利用 Xcode9 的 Swift Migrator tool 迁移 Swift3.2
  2. 利用 Xcode9 的 Swift Migrator tool 迁移 Swift4
  3. 如果是CocoaPods,目前建议保持 Swift3。Xcode9 支持 Swift3 和 Swift4 的 target 混合编译,这也是这么快能把项目迁移 Swift4 的原因。https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Compatibility.html

需要手动更改的地方:

  1. NSAttributedString attributes 类型[String: Any] 改为 [NSAttributedStringKey : Any]

  2. Swift Migrator tool 会错误地转为NSAttributedString.DocumentAttributeKey.documentType 改为NSAttributedString.DocumentReadingOptionKey.documentType

  3. Swift 4: Cannot assign value of type ‘(_) -> Void’ to type ‘(() -> ())?’ 部分情况不能使用下面的简写格式。

    { _ in
    print($0)
    }

  4. Method ‘initialize()’ defines Objective-C class method ‘initialize’, which is not permitted by Swift。 关于 Swift4 不支持 initialize()这个问题,先跳过了,项目只有工具类定义且未使用。

总结

这一次新版本迁移很轻松,API 更改也不多,强烈迁移立即迁移 Swift4。