2016-07-22 16 views
8

Von this document:Praktische Anwendung von Backticks in Swift

Um ein reserviertes Wort als Bezeichner zu verwenden, setzen Sie einen Graviszeichen (`) vor und nach ihm.

Ich bin neugierig auf die praktische Anwendung dieser. Wann würdest du eigentlich etwas `class`, nennen wollen?

Oder, im Zusammenhang damit, warum haben die Designer von Swift dies erlaubt, anstatt uns nur zu verbieten, reservierte Wörter als Identifikatoren zu verwenden?

+0

Die Designer von swift sind alle. Es ist Open Source und stark von der Community beeinflusst. Also muss es genug Beweise gegeben haben, um die Möglichkeit zu unterstützen, dass jemand das tun möchte. – TheValyreanGroup

+1

Diese Funktion war hilfreich, wenn Swift-Code automatisch aus Daten erstellt wurde, die nicht für diesen Zweck bestimmt waren. Zum Beispiel, Erstellen einer Struktur, die einem XML-Element entspricht, das zufällig ein Attribut namens "extension" hat: 'struct Dateiname {var 'extension' =" txt "}'. Ein üblicher Weg, damit umzugehen, ist besser, als mein eigenes nicht-ausfallsicheres Schema zu definieren, zum Beispiel mit "_extension". –

Antwort

13

Die wichtigste Verwendung ist die Interaktion mit anderen Sprachen, die unterschiedliche Schlüsselwörter haben.

Von Swift können Sie C und Obj-C Funktionen aufrufen.

Nun betrachten Sie zum Beispiel, dass Sie eine C-Funktion namens guard aufrufen müssen. Allerdings, das ist ein Schlüsselwort in Swift, deshalb müssen Sie den Compiler sagen, dass Sie nicht wollen, es als Schlüsselwort verwenden, sondern als eine Kennung, zB:

`guard`() 

Es gibt mehrere Keywords in Swift, die weit sind verwendet als Methoden-/Funktionsnamen, z get und set. In vielen Kontexten kann Swift den Unterschied herausfinden, aber nicht immer.

4

In einigen Fällen mit Guard geben Sie uns ein schönes Beispiel für diesen Zweck.In solchen Szenario muss ich selbst Variable Lebenszeit überprüfen, wenn nicht mehr existieren (aktuelle Controller freigegeben) Ich möchte nicht den Rest des Codes ausführen.

guard let `self` = self else { 
     return 
}