質問: CaseIterableはSwift4.2から使えるとネットにあるが、Swift4で動いているように感じる で質問したとおり、SwiftのNバージョンから使えると紹介されているものが、実はSwiftのN未満のバージョンでも使えることがわかりました。 これではSwiftバージョンを基準にしていては、使えるかどうか判断する要素にならなくなってしまうように思います。開発仲間と話をするにしても混乱してしまいます。 実は を見ていて気になっていたのですが > > SDK > > > Xcode 10.0+ Framework > > > Swift Standard Library > > > と記載されています。 これは `CaseIterable`は`Xcode10.0以上`で使えるという解釈でよいでしょうか? この解釈でよいのであれば、Swiftのバージョンのことは意識しないで済みます。
回答: あまりswiftに明るくなく、明確な回答ではないですが、 バージョン互換性と、コンパイラバージョンとターゲットバージョンがごっちゃになっているためではないでしょうか。 Xcode10.0にはswiftコンパイラ4.2とそのswift standard libraryが付属しており、それでコンパイルできるSwift 3モードのコードが、 どのバージョンのXCode(またはSwfitコンパイラ)のswift 3モードでもコンパイルできるかどうかはまた違った話になるのだと思います。 swift 3モードと言っても実際には4.2をswift 3モードでコンパイルした場合のバージョンはswift 3.4となり、 前述のリンクにあるように、 ``` you can use conditional compilation blocks like #if swift(>=3.4) to write code that’s compatible with multiple versions of the Swift compiler. ``` コンパイラバージョンを指定しないと古いコンパイラではコンパイルできない可能性はありそうです。 (swift4のコードをXCode9.2でコンパイルできるかも前述のCompatibilityにある通り) 「使える」という単語をどういう状況で使うかによって変わってくるのではないかと思います。 XCode10を使い、ターゲットもswift 4.2を前提に話しているならどの状況でも使えると言えるでしょう。 XCodeのバージョンで会話されても確実とは思いますが、swiftの事はswiftのバージョンで語られることが多いので難しいところですね。 コンパイラバージョンディレクティブの指定で、どのバージョンのswiftコンパイラを指定することになるかはこちらも参考になると思います。