3.5 Constant and Variable Scope
Scope
Global Scope
// global variable
var age = 55
func printMyAge() {
print(”My age: \(age)”)
}
print(age)
printMyAge()
Local Scope
構造、クラス、
if
・for
loopなど{ }
内部localscopeで宣言された定数または変数は、外部領域では使用できません.
func printBottleCount() {
// local constant
let bottleCount = 99
print(bottleCount)
}
printBottleCount()
print(bottleCount) // Error
Variable Shadowing
より狭いscopeで同じ名前の値を宣言し、外部scopeにある値を遮断します.
適切に使用すれば、よりクリーンなコードを維持できます.
func printComplexScope() {
// function's local scope
let points = 100
print(points)
for index in 1...3 {
// for loop's local scope
// function's local scope를 완전히 가림(shadowing)
// 이 곳에서는 100에 접근할 수 없다.
let points = 200
print(”Loop \(index): \(points+index)”)
}
print(points)
}
printComplexScope()
// console
100
Loop 1: 201
Loop 2: 202
Loop 3: 203
100
Variable Shadowingの使用例
1. if let
if let
同名定数にオプションで抽出した値を割り付け、内部使用に供するfunc exclaim(name: String?) {
if let name = name {
// if let 내부에서의 `name`은 `String?`에서 값을 추출한 `String` 값이다.
print(”Exclaim function was passed: \(name)”)
}
}
2. guard
guard
同名定数に「オプション」から抽出した値を割り当てるguard
下のコードはオプション値に近づけない.“func exclaim(name: String?) {
guard let name = name else { return }
// `String?`값의 name은 더이상 접근할 수 없다.
// `String`값의 name만 접근 가능
print(”Exclaim function was passed: \(name)”)
}
3. Initializer
initializerのパラメータ名をこのタイプのプロパティと同じに設定
イニシエータ内部
パラメータ値に名前でアクセス
self
キーワードでアクセス可能な属性struct Person {
var name: String
var age: Int
init(name: String, age: Int) {
// property에 parameter 값을 할당
self.name = name
self.age = age
}
}
Reference
この問題について(3.5 Constant and Variable Scope), 我々は、より多くの情報をここで見つけました https://velog.io/@j00hyun/3.5-Constant-and-Variable-Scopeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol