2016-03-22 14 views
1

Swift 2.2では、#if swift(>=x.y)バージョンビルド構成as proposed in SE-0020 of Swift evolutionを使用できるようになりました。Swift 2.2:#if swift(> = x.y)バージョンビルド設定:サブバージョンの確認に使用できますか? (Swift 2.1と2.1.1の区別)

#if swift(>=2.2) 
    print("Active!") 
#else 
    this! code! will! not! parse! or! produce! diagnostics! 
#endif 

私は(XCodeの7.1ベータ2からスウィフト2.1を介さずに言う>=2.1.1)1つの段階低いsubversionのレベルの比較でこれを使用しようとするために、好奇心のうちを試してみましたが、私自身の試みドン」しましたtは実際に動作:

  • >=x.y.zは数値リテラルの

    期待という名前のメンバー、エラーを生成しますy = 11

  • >=x.y自然にコンパイルし、2.11、私たちが見てまだいるバージョンとしてではなく渡します。

XCode 7.3 release notesではこれ以上の詳細情報はありません。

質問:シングル.y転覆に限られ、この新しいバージョンのビルド構成がされており、またはこれを回避するために、いくつかのトリックがありますか?

+0

あなたのリンクからは... "今のところ、構文の変更によって+0.1.1の改訂版になることはないので、最大2つのバージョンコンポーネントしか期待できません。 2つのバージョンコンポーネントだけが回答です – user3441734

+0

@ user3441734 jeez、私は完全にそれを逃した、ありがとう! (回答として自由に追加してください) – dfri

+1

@ user3441734私はまた、[Swift evolution threadからのこの投稿]を発見しました(https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/ 003455.html)、Douglas Gregorは "#if swift(> = ....)シグネチャで浮動小数点リテラルを使用することによる許容可能な副作用として、バージョン番号の2つのレベルで十分であるはずです" (例えば、文字列 "2.1.1"というよりむしろ)。だから、2つのバージョンコンポーネントの制限はアクティブな選択(効果)ではなく、利便性の1つです。文字列リテラルではなく浮動小数点リテラルを比較します。 – dfri

答えて

0

回答:新しいバージョンのビルド構成は、2つのバージョンコンポーネントに制限されています。


...

詳細設計

Swift Evolution, proposal SE-0020: Swift Language Version Build Configurationから今のところ、それは そうになるため、我々は唯一、2つのバージョンのコンポーネントまで期待しています構文の変更により+0.0.1のリビジョンになります。

詳細は最も具体的にはクリス・ラットナーとダグラス・グレゴール間のこの交換で、the associated Swift Evolution threadで見つけることができます:15:34に2015年12月18日、swift-経由ダグラス・グレゴールに

進化は書きました:

...

を2015年12月18日には、12時29 PM、クリス・ラで迅速な進化を経由してttnerは書いた:

...

を我々はサブバージョンをサポートしたい場合は、文字列を使用するには、引数があり、例えば"#if swift(2.2.1)"のように。これには、2.2.1が有効な浮動小数点リテラルではないため、パラメータが文字列のである必要があります。レクサーが不快になります。

...

この機能LGTM、と私はまた、我々は引用符をドロップすることを好みます。 バージョン番号の2つのレベルは、で十分です。

関連する問題