Xcode9 是否向后兼容 Swift 3(或 3.1)?

Is Xcode9 backwards compatible to Swift 3 (or 3.1)?

我刚刚开始使用 Xcode9 (beta2)。我的理解是它不会强迫我立即更改我的代码。但是,我在使用 (Gloss) 的库时遇到构建错误:

1) 对于以下代码:

public func valueForKeyPath(keyPath: String, withDelimiter delimiter: String = GlossKeyPathDelimiter, logger: Logger = GlossLogger()) -> Any? {

我得到:

Initializer 'init()' is internal and cannot be referenced from a default argument value

2) 对于此代码:

internal func flatMap<KeyPrime : Hashable, ValuePrime>(_ transform: (Key, Value) throws -> (KeyPrime, ValuePrime)?) rethrows -> [KeyPrime : ValuePrime] {
    return Dictionary<KeyPrime,ValuePrime>(elements: try flatMap({ (key, value) in
        return try transform(key, value)
    }))
}

我得到:

Closure tuple parameter '(key: _, value: _)' does not support destructuring

这两个都不会导致 Xcode 8.3/Swift 3.1.

出现问题

我正在使用 Xcode9 而没有选择更新到 Swift 的选项 4. 似乎有几种可能性:

  1. 需要设置一些标志以保持 Swift 3.1 向后兼容性
  2. Xcode9 处于测试阶段,尚未完全准备好
  3. Xcode9 不会完全向后兼容 Swift 3.1

想法?

Xcode 9 与 Swift 3 和 4 交叉兼容。但是,您需要使用 Swift 3.2,这是 Xcode 9 的最低要求。

您可以从 Xcode 项目的 Build Settings 中找到特定 Xcode 支持的语言列表。

这是示例参考,您如何查看它:

(对于Xcode 9,它支持,Swift 3.2和Swift 4.0)

这是参考答案,如何轻松地从 Swift 3.0 切换到 4.0