Swift 2.0 を使っているのですが、アプリケーション内やクラス内で定数宣言をする際に、
書き方や宣言場所によってスコープや利用方法が変わってくるのでまとめてみました。
定数名 | 宣言場所 | 接頭辞 | スコープ |
---|---|---|---|
ConstantA |
クラス宣言の外側 | let |
同一のモジュール内でどこでも使える |
ConstantB |
クラス宣言の外側 | private let |
同一のファイル内でどこでも使える |
ConstantC |
クラス宣言の内側 | static let |
同一のモジュール内でクラス変数としてどこでも使える |
ConstantD |
クラス宣言の内側 | private static let |
同一のファイル内でクラス変数としてどこでも使える |
ConstantE |
クラス宣言の内側 | let |
同一のモジュール内でインスタンス変数としてどこでも使える |
ConstantF |
クラス宣言の内側 | private let |
同一のファイル内でインスタンス変数どこでも使える |
SomeClass.swift
let ConstantA = "A"
private let ConstantB = "B"
class SomeClass: NSObject {
static let ConstantC = "C"
private static let ConstantD = "D"
let ConstantE = "E"
private let ConstantF = "F"
class func classMethod() {
print("A=\(ConstantA)")
print("B=\(ConstantB)")
print("C=\(ConstantC)")
print("D=\(ConstantD)")
print("E=\(ConstantE)") // コンパイルエラー
print("F=\(ConstantF)") // コンパイルエラー
}
func instanceMethod() {
print("A=\(ConstantA)")
print("B=\(ConstantB)")
print("C=\(ConstantC)") // コンパイルエラー
print("D=\(ConstantD)") // コンパイルエラー
print("E=\(ConstantE)")
print("F=\(ConstantF)")
}
}
OtherClass.swift
// SomeClass とは別のファイル
class OtherClass: NSObject {
class func method() {
print("A=\(ConstantA)")
print("B=\(ConstantB)") // コンパイルエラー: privateなので参照できない
print("C=\(SomeClass.ConstantC)")
print("D=\(SomeClass.ConstantD)") // コンパイルエラー: privateなので参照できない
print("E=\(SomeClass().ConstantE)")
print("F=\(SomeClass().ConstantF)") // コンパイルエラー: privateなので参照できない
}
}