2016-06-28 111 views
6

在創建私有常量雨燕有可能在類中聲明它們,聲明一個類以外的私人常數斯威夫特

final class SomeClass: NSObject { 

    private let someFloat:CGFloat = 12 
} 

還有一類之外。

private let someFloat:CGFloat = 12 

final class SomeClass: NSObject { } 

當類範圍之外就是不斷被創建。是否有任何其他差異使用一種方法比其他文件,並沒有任何人有最佳做法的意見呢?

+0

在第一個例子中,你正在爲每個實例聲明一個私有常量,但我認爲編譯器可以將它優化爲整個類的常量。第二種方法更像是如何在ObjC中完成的。兩者都相當於我。 –

+0

除@CodeDifferent外,您的第二個選項可通過該文件中創建的所有類來使用。 – Santosh

+0

也考慮重寫屬性。 – Sulthan

回答

1

他們的訪問方式不同。

在第一種情況下,someFloatSomeClass的範圍內。它的訪問權限爲SomeClass.someFloat

在第二種情況下,someFloat位於模塊範圍內。它的訪問只有someFloat

第一種方法是優選的。在模塊名稱空間中找到標識符通常比較困難,因爲標準庫或基礎/可可框架中的所有標識符都可以很容易地將它們淹沒。

+0

正確,除了最後一段。沒有全局名稱空間。只有模塊名稱空間。另外一個私人變量不會污染任何東西。 – Sulthan

+0

@Sulthan你說得對,我修改了那個錯誤。我還澄清了爲什麼命名空間污染很重要。 – Alexander