迁移 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 ‘(() -> ())?’ 部分情况不能使用下面的简写格式。

    1
    2
    3
    { _ in
    print($0)
    }

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

总结

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