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"
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"