

[CaseIterableはSwift4.2から使えるとネットにあるが、Swift4で動いているように感じる](https://ja.stackoverflow.com/questions/50671/caseiterable%E3%81%AFswift4-2%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%A8%E3%83%8D%E3%83%83%E3%83%88%E3%81%AB%E3%81%82%E3%82%8B%E3%81%8C-swift4%E3%81%A7%E5%8B%95%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E6%84%9F%E3%81%98%E3%82%8B)

で質問したとおり、SwiftのNバージョンから使えると紹介されているものが、実はSwiftのN未満のバージョンでも使えることがわかりました。

これではSwiftバージョンを基準にしていては、使えるかどうか判断する要素にならなくなってしまうように思います。開発仲間と話をするにしても混乱してしまいます。

実は  
<https://developer.apple.com/documentation/swift/caseiterable#overview>  
を見ていて気になっていたのですが

> SDK
>
> Xcode 10.0+ Framework
>
> Swift Standard Library

と記載されています。

これは

`CaseIterable`は`Xcode10.0以上`で使えるという解釈でよいでしょうか？  
この解釈でよいのであれば、Swiftのバージョンのことは意識しないで済みます。


CC BY-SA 4.0
2018-11-27T12:10:11.323
50679
2018-11-28T00:30:47.570
2018-11-28T00:30:47.570
9008
9008
question
swift
SwiftのNバージョンから使えるという表現よりもSDKのNバージョンから使えるという考え方のほうが正しいか？


あまりswiftに明るくなく、明確な回答ではないですが、  
バージョン互換性と、コンパイラバージョンとターゲットバージョンがごっちゃになっているためではないでしょうか。  
<https://docs.swift.org/swift-book/GuidedTour/Compatibility.html#>

Xcode10.0にはswiftコンパイラ4.2とそのswift standard libraryが付属しており、それでコンパイルできるSwift
3モードのコードが、  
どのバージョンのXCode（またはSwfitコンパイラ）のswift 3モードでもコンパイルできるかどうかはまた違った話になるのだと思います。  
swift 3モードと言っても実際には4.2をswift 3モードでコンパイルした場合のバージョンはswift 3.4となり、  
前述のリンクにあるように、

[code]

    you can use conditional compilation blocks like #if swift(>=3.4) to write code that’s 
    compatible with multiple versions of the Swift compiler.
    
[/code]

コンパイラバージョンを指定しないと古いコンパイラではコンパイルできない可能性はありそうです。  
（swift4のコードをXCode9.2でコンパイルできるかも前述のCompatibilityにある通り）

「使える」という単語をどういう状況で使うかによって変わってくるのではないかと思います。  
XCode10を使い、ターゲットもswift 4.2を前提に話しているならどの状況でも使えると言えるでしょう。  
XCodeのバージョンで会話されても確実とは思いますが、swiftの事はswiftのバージョンで語られることが多いので難しいところですね。

コンパイラバージョンディレクティブの指定で、どのバージョンのswiftコンパイラを指定することになるかはこちらも参考になると思います。

<https://github.com/apple/swift-evolution/blob/master/proposals/0212-compiler-
version-directive.md>


CC BY-SA 4.0
2018-11-27T15:34:05.607
50684
2018-11-27T15:34:05.607
728
50679
answer