2016-03-22 1 views
1

Mit Swift 2.2 können wir jetzt die #if swift(>=x.y) Version Build-Konfiguration verwenden, as proposed in SE-0020 of Swift evolution.Swift 2.2: #if swift (> = x.y) Version Build-Konfiguration: Kann es verwendet werden, um Unterversionen zu überprüfen? (Z. B. Swift 2.1 von 2.1.1 unterscheiden)

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

Ich habe versucht, aus Neugier, um zu versuchen, diesen unteren Subversion Pegelvergleich mit einem Schritt zu verwenden (zB >=2.1.1 ohne Swift vorbei 2.1 von XCode 7.1 Beta 2), aber meine eigenen Versuchen, don‘ t wirklich funktionieren:

  • >=x.y.z einen Fehler ergibt,

    erwartet benannte Mitglied Zahlenliteral

  • >=x.y mit y = 11 kompiliert natürlich und Pässe, sondern als Version sind wir sehen noch, 2.11.

Ich kann keine weiteren Details dazu in der XCode 7.3 release notes finden.

Frage: Ist diese neue Version Build-Konfiguration auf eine einzige .y Subversion beschränkt, oder gibt es einen Trick, dies zu umgehen?

+0

von Ihrem Link .... "Im Moment werden wir nur bis zu zwei Versionskomponenten erwarten, da es unwahrscheinlich ist, dass eine Syntaxänderung es in einer +0.0.1 Revision machen wird." nur zwei Komponenten der Version ist die Antwort – user3441734

+0

@ user3441734 jeez, habe ich total vermisst, danke! (Fühlen Sie sich frei, als Antwort hinzuzufügen) – dfri

+1

@ user3441734 Ich habe jetzt auch gefunden [dieser Beitrag aus der Swift Evolution Thread] (https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/ 003455.html), wo Douglas Gregor schreibt _ "Zwei Ebenen der Versionsnummer sollten ausreichen." _, Als ein akzeptabler Nebeneffekt der Verwendung eines Fließkomma-Literals in der '#if swift (> = ....) Signatur (anstatt, sagen wir, eine Saite, "2.1.1"). So scheint es, dass die Beschränkung von zwei Versionskomponenten keine aktive Wahl (ein Effekt) war, sondern eher eine der Bequemlichkeit, w.r.t. Fließkomma-Literale anstelle von String-Literalen vergleichen. – dfri

Antwort

0

Antwort: Die neue Version Build-Konfiguration ist auf zwei Versionskomponenten beschränkt.


Von Swift Evolution, proposal SE-0020: Swift Language Version Build Configuration

Detailplanung

...

Vorerst werden wir nur bis zu zwei Version Komponenten erwarten, da es unwahrscheinlich ist, dass eine Syntaxänderung es in einer +0.0.1-Revision machen wird.

Weitere Details finden Sie in the associated Swift Evolution thread, die meist speziell in diesem Austausch zwischen Chris Lattner und Douglas Gregor zu finden:

Am 18. Dezember 2015, um 3:34 Uhr, Douglas Gregor über SWIFT- Evolution hat geschrieben:

...

am 18. Dezember 2015, um 12:29 Uhr, Chris La ttner über swift-Evolution schrieb:

...

Das Argument ein String ist zu verwenden, wenn wir Umstürze unterstützen wollte, z.B. wie "#if swift (2.2.1)".Dies erfordert, dass der Parameter eine Zeichenfolge ist, , da 2.2.1 kein gültiges Fließkomma-Literal ist - der Lexer wird nicht erfreut sein.

...

Diese Funktion LGTM, und ich ziehe auch, dass wir die Zitate fallen. Zwei Versionsnummern sollten ausreichend sein.