Swift-グローバル変数とローカル変数

2602 ワード

上記の属性の計算および観察に使用される能力は、グローバル変数およびローカル変数にも使用できます.グローバル変数は、任意の関数、メソッド、閉パッケージ、またはタイプコンテキストの外で定義される変数です.ローカル変数は、関数、メソッド、または閉パッケージコンテキストで定義された変数です.
前の章で出会ったグローバル変数とローカル変数は、格納されている変数です.格納された変数(格納されたプロパティなど)は、あるタイプの値に格納を提供し、値の設定と取得を許可します.
ただし、計算変数をグローバルまたはローカルの範囲で定義し、変数を格納するオブザーバを定義することもできます.計算変数は、格納するのではなく、値を計算し、計算プロパティと同じ方法で書き込みます.

タイプ属性の構文


CとObjective-Cでは、タイプに関連付けられた静的定数と変数をグローバル静的変数として定義します.しかしながら、Swiftでは、タイプ属性がタイプ定義の一部として記載され、タイプの外側カッコでは、各type属性がサポートされるタイプとして明示的に限定される.
staticキーワードを使用してタイププロパティを定義します.クラスタイプの計算タイププロパティでは、クラスキーワードを使用して、サブクラスがスーパークラスの実装を上書きできるようにします.次の例では、タイプ属性を格納および計算する構文を示します.
struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 1
    }
}
enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 6
    }
}
class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 27
    }
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}

クエリーとタイプ属性の設定

print(SomeStructure.storedTypeProperty)
// Prints "Some value."
SomeStructure.storedTypeProperty = "Another value."
print(SomeStructure.storedTypeProperty)
// Prints "Another value."
print(SomeEnumeration.computedTypeProperty)
// Prints "6"
print(SomeClass.computedTypeProperty)
// Prints "27"
struct AudioChannel {
    static let thresholdLevel = 10
    static var maxInputLevelForAllChannels = 0
    var currentLevel: Int = 0 {
        didSet {
            if currentLevel > AudioChannel.thresholdLevel {
                // cap the new audio level to the threshold level
                currentLevel = AudioChannel.thresholdLevel
            }
            if currentLevel > AudioChannel.maxInputLevelForAllChannels {
                // store this as the new overall maximum input level
                AudioChannel.maxInputLevelForAllChannels = currentLevel
            }
        }
    }
}
var leftChannel = AudioChannel()
var rightChannel = AudioChannel()



leftChannel.currentLevel = 7
print(leftChannel.currentLevel)
// Prints "7"
print(AudioChannel.maxInputLevelForAllChannels)
// Prints "7"



rightChannel.currentLevel = 11
print(rightChannel.currentLevel)
// Prints "10"
print(AudioChannel.maxInputLevelForAllChannels)
// Prints "10"