2016-06-28 9 views
6

Wenn private Konstanten in Swift zu schaffen ist es möglich, sie innerhalb einer KlasseDeklarieren private Konstanten außerhalb einer Klasse in Swift

final class SomeClass: NSObject { 

    private let someFloat:CGFloat = 12 
} 

sowie außerhalb einer Klasse, zu erklären.

private let someFloat:CGFloat = 12 

final class SomeClass: NSObject { } 

Wenn außerhalb der Klasse des Umfangs ist die Datei, die Konstante in erstellt. Gibt es weitere Unterschiede zu einem Verfahren über die andere mit, und jeder hat Meinungen über die besten Praktiken?

+0

In der ersten, deklarieren Sie eine private Konstante pro Instanz, obwohl ich denke, dass der Compiler es auf 1 Konstante für die gesamte Klasse optimieren kann. Die zweite Methode ist mehr wie in ObjC. Beide sind mir gleichwertig. –

+0

Zusätzlich zu @CodeDifferent ist Ihre zweite Option über alle Klassen verfügbar, die in dieser Datei erstellt wurden. – Santosh

+0

Beachten Sie auch das Überschreiben von Eigenschaften. – Sulthan

Antwort

1

Sie sind anders zugegriffen.

Im ersten Fall ist someFloat im Bereich SomeClass. Es wird mit SomeClass.someFloat zugegriffen.

Im zweiten Fall befindet sich someFloat im Modulbereich. Es ist mit nur someFloat zugegriffen.

Die erste Methode ist vorzuziehen. Es ist im Allgemeinen schwieriger, Identifikatoren im Modulnamensraum zu finden, da sie leicht von allen Identifikatoren in der Standardbibliothek oder im Framework der Stiftung/Kakao übertönt werden können.

+0

Richtig außer dem letzten Absatz. Es gibt keinen globalen Namespace. Es gibt nur Modulnamespace. Auch eine private Variable wird nichts verschmutzen. – Sulthan

+0

@Sultan Du hast Recht, ich habe diesen Fehler korrigiert. Ich habe auch geklärt, warum die Namensraumverschmutzung eine Rolle spielt. – Alexander

Verwandte Themen