title: Is Xcode9 backwards compatible to Swift 3 (or 3.1)?
body: <p>I've just started using Xcode9 (beta2). My understanding was that it wouldn't force me to immediately change my code. However, I'm getting a build errors coming up with a library I'm using (Gloss):</p>
  
  <p>1) For the following code:</p>
  
  <pre><code>public func valueForKeyPath(keyPath: String, withDelimiter delimiter: String = GlossKeyPathDelimiter, logger: Logger = GlossLogger()) -&gt; Any? {
  </code></pre>
  
  <p>I get:</p>
  
  <blockquote>
    <p>Initializer 'init()' is internal and cannot be referenced from a
    default argument value</p>
  </blockquote>
  
  <p>2) For this code:</p>
  
  <pre><code>internal func flatMap&lt;KeyPrime : Hashable, ValuePrime&gt;(_ transform: (Key, Value) throws -&gt; (KeyPrime, ValuePrime)?) rethrows -&gt; [KeyPrime : ValuePrime] {
      return Dictionary&lt;KeyPrime,ValuePrime&gt;(elements: try flatMap({ (key, value) in
          return try transform(key, value)
      }))
  }
  </code></pre>
  
  <p>I'm getting:</p>
  
  <blockquote>
    <p>Closure tuple parameter '(key: _, value: _)' does not support
    destructuring</p>
  </blockquote>
  
  <p>Both of these caused no problem with Xcode 8.3/Swift 3.1.</p>
  
  <p>I am using Xcode9 without having chosen the option to update to Swift 4. There seems several possibilities:</p>
  
  <ol>
  <li>There are some flags that need to be set to retain Swift 3.1 backwards compatibility</li>
  <li>Xcode9 is in beta and just isn't ready fully</li>
  <li>Xcode9 will not be completely backwards compatible to Swift 3.1</li>
  </ol>
  
  <p>Thoughts?</p>