μ μ₯ νλ‘νΌν° | κ³μ° νλ‘νΌν° |
κ°μ μ μ₯νκ³ μλ νλ‘νΌν° | κ°μ μ μ₯νκ³ μμ§ μκ³ νΉμ νκ² κ³μ°ν κ°μ λ°νν΄ μ£Όλ νλ‘νΌν° |
ν΄λμ€μ ꡬ쑰체μμλ§ μ¬μ© κ°λ₯ | ν΄λμ€, ꡬ쑰체, μ΄κ±°ν λͺ¨λμμ μ¬μ©κ°λ₯ |
μ μ₯ νλ‘νΌν°
letν€μλλ₯Ό μ΄μ©ν΄μ μμ νΉμ varν€μλλ₯Ό μ΄μ©ν΄μ λ³μλ‘ μ μΈν΄ μ¬μ©
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// λ²μ κ°μ 0, 1, 2 μ
λλ€.
rangeOfThreeItems.firstValue = 6
// λ²μ κ°μ 6, 7, 8 μ
λλ€.
μμ ꡬ쑰체 μΈμ€ν΄μ€μ μ μ₯ νλ‘νΌν°
ꡬ쑰체λ₯Ό μμ(let)λ‘ μ μΈνλ©΄ κ·Έ ꡬ쑰체 μΈμ€ν΄μ€μ νλ‘νΌν°λ₯Ό λ³κ²½ν μ μμ
ν΄λμ€λ letμΌλ‘ μ μΈνλλΌλ νλ‘νΌν°κ° λ³κ²½ κ°λ₯
- ν΄λμ€ μΈμ€ν΄μ€λ μ°Έμ‘° νμ μ΄κΈ° λλ¬Έ
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// λ²μ κ°μ 0, 1, 2, 3 μ
λλ€.
rangeOfFourItems.firstValue = 6
// μλ¬ λ°μ!
μ§μ° μ μ₯ νλ‘νΌν°
- κ°μ΄ μ²μμΌλ‘ μ¬μ© λκΈ° μ μλ κ³μ°λμ§ μλ νλ‘νΌν°
- νλ‘νΌν°μ μ μΈ μμ lazy ν€μλλ₯Ό λΆμ
- λ°λμ λ³μ(var)λ‘ μ μΈν΄μΌ ν¨
- μμλ μ΄κΈ°νκ° λκΈ°μ μ νμ κ°μ κ°λ νλ‘νΌν°μΈλ°, μ§μ° νλ‘νΌν°λ μ²μ μ¬μ©λκΈ° μ μλ κ°μ κ°μ§ μλ νλ‘νΌν°μ΄κΈ° λλ¬Έ
μ§μ° μ μ₯ νλ‘νΌν°μ μ¬μ©
- νλ‘νΌν°κ° νΉμ μμμ μμ‘΄μ μ΄μ΄μ κ·Έ μμκ° λλκΈ° μ μ μ μ ν κ°μ μμ§ λͺ»νλ κ²½μ°
- 볡μ‘ν κ³μ°μ΄λ λΆνκ° λ§μ΄ 걸리λ μμ μ ν λ μ¬μ©νλ©΄ μ€μ μ¬μ©λκΈ° μ μλ μ€νλμ§ μμμ μΈμ€ν΄μ€μ μ΄κΈ°ν μμ μ 볡μ‘ν κ³μ°μ νΌν μ μμ
λ¨μΌ μ€λ λμμ μ¬μ©ν λ
- μ΄κΈ°νλ ν λ²λ§ μνλ¨
- λ¨μΌ μ€λ λ νκ²½μμλ μ²μμΌλ‘ μ§μ° νλ‘νΌν°μ μ κ·Όνλ μμ μ μ΄κΈ°νκ° μνλκ³ , μ΄νμλ μ΄λ―Έ μ΄κΈ°νλ κ°μ΄ λ°νλ¨
μ¬λ¬ μ€λ λμμ μ κ·Όν κ²½μ°
- μ¬λ¬ μ€λ λκ° λμμ ν΄λΉ μ§μ° νλ‘νΌν°λ₯Ό νκ°νμ¬ μ΄κΈ°νλ₯Ό μλ κ°λ₯ => μ¬λ¬ λ²μ μ΄κΈ°νκ° λ°μν μ μμ
- λ€μ€ μ€λ λ νκ²½μμ μ¬μ©ν λλ λμ μ κ·Όμ λν λκΈ°ν(Synchronization)λ₯Ό κ³ λ €ν΄μΌ ν¨
κ³μ° νλ‘νΌν°
ν΄λμ€, ꡬ쑰체, μ΄κ±°νμμ μ€μ κ°μ μ μ₯νκ³ μλ κ²μ΄ μλλΌ getterμ optionalν setterλ₯Ό μ κ³΅ν΄ κ°μ νμνκ³ κ°μ μ μΌλ‘ λ€λ₯Έ νλ‘νΌν° κ°μ μ€μ ν μ μμ
Setter μ μΈμ κ°λ΅ν νν
struct AlternativeRect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
}
μ½κΈ°μ μ© κ³μ° νλ‘νΌν°
getterλ§ μκ³ setterλ₯Ό μ 곡νμ§ μλ κ³μ° νλ‘νΌν°
μ½κΈ°μ μ© κ³μ° νλ‘νΌν°λ λ°λμ λ°ν κ°μ μ 곡νκ³ λ€λ₯Έ κ°μ μ§μ ν μλ μλ νλ‘νΌν°
μ£Όμ!
κ³μ°λ νλ‘νΌν°λ₯Ό μ μΈμμλ λ°λμ let μ΄ μλλΌ var λ‘ μ μΈν΄μΌν¨
λ³΄ν΅ μ½κΈ°μ μ©(read-only)μ΄λΌ ν¨μ νλ² κ°μ΄ μ ν΄μ§λ©΄ λ³νμ§ μκΈ° λλ¬Έμ let μΌλ‘ μ μΈνλ κ²μ΄ λ§μΌλ κ³μ°λ νλ‘νΌν°λ μ½κΈ°μ μ©(read-only)μ΄λΌ νλλΌλ κ³μ° κ°(width, height, depth λ±)μ λ°λΌ κ°μ΄ λ³ν μ μκΈ° λλ¬Έμ var λ‘ μ μΈν¨
νλ‘νΌν° μ΅μ λ²
- νλ‘νΌν°μλ μ κ°μ΄ μ€μ (set) λ λλ§λ€ μ΄ μ΄λ²€νΈλ₯Ό κ°μ§ν μ μλ μ΅μ λ²λ₯Ό μ 곡 ,μ κ°μ΄ μ΄μ κ°κ³Ό κ°λλΌλ νμ νΈμΆλ¨
- νλ‘νΌν° μ΅μ λ²λ μ§μ° μ μ₯ νλ‘νΌν°μμλ μ¬μ©ν μ μμ
- κ³μ°λ νλ‘νΌν°λ setterμμ κ°μ λ³νλ₯Ό κ°μ§ ν μ μκΈ° λλ¬Έμ λ°λ‘ μ΅μ λ²λ₯Ό μ μν νμκ° μμ
willSet
- κ°μ΄ μ μ₯λκΈ° λ°λ‘ μ§μ μ νΈμΆ
- willSetμμλ μ κ°μ νλΌλ―Έν°λͺ μ μ§μ ν μ μλλ°, μ§μ νμ§ μμΌλ©΄ κΈ°λ³Έ κ°μΌλ‘ newValueλ₯Ό μ¬μ©
didSet
- μ κ°μ΄ μ μ₯λκ³ λ μ§νμ νΈμΆ
- didSetμμλ λ°λκΈ° μ μ κ°μ νλΌλ―Έν°λͺ μ μ§μ ν μ μλλ°, μ§μ νμ§ μμΌλ©΄ κΈ°λ³Έ κ°μΌλ‘ oldValueλ₯Ό μ¬μ©
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \\(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \\(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps
- willSet → μλ‘μ΄ κ°μ νλΌλ―Έν°λͺ μΌλ‘ newTotalStepsλ₯Ό μ§μ ν΄μ μ¬μ©
- didSet → λ³νκΈ° μ μ κ°μ μλ―Ένλ νλΌλ―Έν°λͺ μ μ§μ νμ§ μκ³ oldValueλΌλ κΈ°λ³Έ νλΌλ―Έν°λͺ μ μ΄μ©
μ μλ³μμ μ§μλ³μ
νλ‘νΌν°μ νλ‘νΌν° μ΅μ λ² κΈ°λ₯μ μ μλ³μμ μ§μλ³μ λͺ¨λμμ μ΄μ© κ°λ₯
μ μ λ³μ
- ν¨μ, λ©μλ, ν΄λ‘μ νΉμ νμ 컨ν μ€νΈ λ°μ μ μλ λ³μ
- μ μ μμμ λ³μλ lazyν€μλλ₯Ό λΆμΌ νμ μμ΄ μ§μ° μ μ₯ νλ‘νΌν°μ²λΌ μ§μ° κ³μ°λ¨
μ§μ λ³μ
- ν¨μ, λ©μλ, ν΄λ‘μ νΉμ νμ 컨ν μ€νΈ μμ μ μΈλ λ³μ
- μ§μ μμμ λ³μλ μ§μ° κ³μ°λ μ μμ
νμ νλ‘νΌν°
- νμ νλ‘νΌν°λ νΉμ νμ μ μν νλ‘νΌν°λ‘ κ·Έ νμ μ ν΄λΉνλ λ¨ νλμ νλ‘νΌν°λ§ μμ±
- νΉμ νμ μ λͺ¨λ μΈμ€ν΄μ€μ 곡ν΅μΌλ‘ μ¬μ©λλ κ°μ μ μν λ μ μ©ν¨
μ£Όμ!
νμ νλ‘νΌν°λ νμ μ΄κΈ°κ°μ μ§μ ν΄μ μ¬μ©ν΄μΌν¨ → νμ μ체μλ μ΄κΈ°μ(Initializer)κ° μμ΄ μ΄κΈ°ν ν κ³³μ΄ μκΈ° λλ¬Έ
νμ νλ‘νΌν° ꡬ문
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"
νμ νλ‘νΌν° μ₯μ
- λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νλ κ°μ΄κΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μ¬μ©μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ κ°λ₯
- μΈμ€ν΄μ€λ§λ€ μ€λ³΅λ κ°μ μ μ₯ν νμκ° μκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μ μ½ κ°λ₯
- λͺ¨λ μΈμ€ν΄μ€κ° λμΌν νμ νλ‘νΌν° κ°μ μ¬μ©νκΈ° λλ¬Έμ, μμμΉ λͺ»ν κ°μ μ°¨μ΄λ λΆμΌμΉ λ°©μ§ κ°λ₯
'β¨οΈ Language > swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μλΈμ€ν¬λ¦½νΈ (0) | 2024.03.22 |
---|---|
[Swift] λ©μλ (0) | 2024.03.21 |
[Swift] ν΄λμ€μ ꡬ쑰체 (0) | 2024.03.19 |
[Swift] ν΄λ‘μ (1) | 2024.03.18 |
[Swift] μμΈ μ²λ¦¬μ ν¨μ (4) | 2024.03.17 |