π 1 . μ μ₯ μμ±(Stored Property)
ν΄λμ€μ ꡬ쑰체μ μΆκ°ν μμλ€.
λ³μ/μμ μ μ₯ μμ±
//λ³μ μ μ₯ μμ± μ μΈ
var name: Type = DefaultValue
//μμ μ μ₯ μμ± μ μΈ
let name: Type = DefaultValue
class Person {
let name: String = "swift"
var age: Int = 20
}
let p = Person()
//μΈμ€ν΄μ€λͺ
.νλ‘νΌν°λͺ
p.name
p.age
p.age = 30
p.name = "apple" // μλ¬
//Struct Personμ΄λΌλ©΄
//p.age = 20 μΌ λ μλ¬ λ°μ
//ꡬ쑰체 μΈμ€ν΄μ€λ₯Ό μμμ μ μ₯νλ©΄ ꡬ쑰체 μ체λ μμκ° λλ€.
//μ΄λ ꡬ쑰체μ ν¬ν¨λ λͺ¨λ μμ±μ΄ μμκ° λλ€.(κ°μ λ°κΏ μ μκ² λλ€)
μ§μ° μ μ₯ μμ±(Lazy Stroed Property)
μ μ₯ μμ±μ΄ μ΄κΈ°ν λλ μμ μ μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ μμ μ΄λ€.
μ§μ° μ μ₯μμ±μ μ΄κΈ°νλ₯Ό μ§μ°μν€λ κ²μ΄λ€. μ¦, μμ±μ μ²μ μ κ·Όνλ μμ μ μ΄κΈ°ν λλ€.
μΈμ€ν΄μ€κ° μ΄κΈ°ν λκ³ λμ κ°λ³μ μΌλ‘ μ΄κΈ°ν λλ―λ‘ μΈμ€ν΄μ€λ₯Ό λ³μμ μ μ₯νλ lazy var λ‘ μ μΈνλ€.
μμ±μμμ μ΄κΈ°ν νμ§ μκ³ μ μΈν λ κΈ°λ³Έ κ°μ μ μ₯ν΄μΌ νλ€.
struct Image {
init() {
print("μ€ν λ‘κ·Έ")
}
}
struct BlogPost {
let title: String = "Title"
lazy var attachment: Image = Image()
}
var post = BlogPost() //μ¬κΈ°κΉμ§λ μ€νλ‘κ·Έκ° μΆλ ₯λμ§ μμ
post.attachment //μμ±μ μ κ·Όνλ μμ μ μμ±μκ° νΈμΆλκ³ print() μ€ν
μ§μ°μ μ₯μμ±μ ν΄λ‘μ μ¬μ©λ² κ³΅λΆ ν λ΄μ© μΆκ°!!!!!!!!!!!!!!!!!!!!!!1
π 2. κ³μ° μμ±(Computed Property)
ν΄λμ€, ꡬ쑰체λΏλ§ μλλΌ μ΄κ±°νμμλ μ μΈν μ μκ³ μ€μ κ°μ μ μ₯νκ³ μλ κ²μ΄ μλλΌ
getterλ setterλ₯Ό ν΅ν΄ κ°μ νμνκ³ κ°μ μ μΌλ‘ λ€λ₯Έ νλ‘νΌν° κ°μ μ€μ ν μ μλ€.
μ μ₯ μμ±μ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§κ³ μμ§λ§ κ³μ°μμ±μλ λ©λͺ¨λ¦¬ 곡κ°μ΄ μλ€.
κ·Έλμ λ€λ₯Έ μ μ₯ μμ±μ μ½μ΄μ νμν κ³μ°μ μ€ν ν λ€λ₯Έ μμ±μ λ겨주λ λ°©μμ΄λ€.
λ°λΌμ νμ varλ‘ μ μΈν΄μΌ νλ€.
μ μ₯μμ±μ ν΄λμ€μ ꡬ쑰체μ μΆκ°ν μ μλλ°, κ³μ°μμ±μ ν΄λμ€μ ꡬ쑰체, μ΄κ±°νμλ μΆκ°ν μ μλ€.
var name: Type {
get { //getλΈλ‘μ μμ±κ°μ μ½μ λ μ€ν
return //λ°λμ return ν€μλλ‘ λ€λ₯Έ μμ±μ μλ κ°μ λ¦¬ν΄ or 리ν΄νμ
κ³Ό λμΌν κ°μ 리ν΄
}
set(νλΌλ―Έν°λͺ
) { //setλΈλ‘μ κ°μ μ μ₯ν λ μ€ν, μμ±μ μ μ₯λ κ°μ΄ νλΌλ―Έν°λͺ
μΌλ‘ μ λ¬λ¨
}
}
κ³μ° μμ± μμ
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
//μ’νμ ν¬κΈ°λ₯Ό κ°κ³ μλ μ¬κ°νμ νννλ ꡬ쑰체
struct Rect {
var origin = Point()
var size = Size()
//μ¬κ°νμ μ€μ μ νννλ center κ³μ°μμ±
var center: Point {
//getter : λ€λ₯Έ μ μ₯μμ±μ κ°μ μ°μ°νκ³ κ²°κ³Όκ° λ°ν μν
get { //origin μΈμ€ν΄μ€μ μ μ₯μμ±μ ν΅ν΄ μ¬κ°ν μ€μ¬ μ’ν ꡬνκΈ°
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY) //μ¬κ°ν μ€μ¬μ ν΄λΉνλ μ’νκ°μ Point ꡬ쑰체λ₯Ό ν΅ν΄ λ°ν
}
//setter : νλΌλ―Έν°λ‘ λ°μ κ°μ λ€λ₯Έ μ μ₯μμ±(origin property)μ μ μ₯ -> μ¬κ°νμ μμΉ μ΄λ
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
print("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// "square.origin is now at (10.0, 10.0)" μΆλ ₯
setterμ μΆμ½
μλ‘μ΄ κ°μ λ°μ μ¬ λ, set λ©μλ μμ νλΌλ―Έν° μ΄λ¦μ μ§μ νμ§ μμλ newValueλ₯Ό μ¬μ©ν΄ μλ‘ μ€μ λ κ°μ λΆλ¬ μ¬ μ μλ€.
//μΆμ½ μ
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
//μΆμ½ ν
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
getterμ μΆμ½
νμ€μ expressionμΌλ‘ μ μΈλμλ€λ©΄ return ν€μλ μλ΅ κ°λ₯
//μΆμ½ μ
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
//μΆμ½ ν
get {
Point(x: origin.x + (size.width / 2)
y: origin.y + (size.height / 2))
}
μ½κΈ° μ μ© κ³μ° μμ±(Read Only)
κ°μ μ½κ³ λ°ννμ§λ§ λ€λ₯Έ κ°μ μ§μ ν μ μλ νλ‘νΌν°λ₯Ό μλ―Ένλ€.
μ΄λ setμ΄ νμνμ§ μλ€λ©΄ getκ³Ό { }λ₯Ό μμ μΆμ½ν μ μλ€. μ΄λ, μ½κΈ° μ μ© κ³μ°μμ±μ varλ‘λ§ μ μΈ κ°λ₯νλ€.
struct Cuboid { //ν΄λ‘μ λ ν·κ°λ¦΄ μ μλλ°, μ΄λ ν λΉμ°μ°μ(=)κ° μλμ§ νμΈ(Cuboid = {} λ ν΄λ‘μ )
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double {
return width * height * depth
}
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
// "the volume of fourByFiveByTwo is 40.0" μΆλ ₯
π 3. νμ μμ±(Type Property)
https://dkswlgus0314.tistory.com/76
- κ°μ λν μ μ₯ μ¬λΆλ₯Ό κΈ°μ€μΌλ‘ μ μ₯ μμ±κ³Ό μ°μ° μμ±μΌλ‘ ꡬλΆν μ μλ€.
- μΈμ€ν΄μ€μ μμ μ¬λΆλ₯Ό κΈ°μ€μΌλ‘ μΈμ€ν΄μ€ μμ±κ³Ό νμ μμ±μΌλ‘ ꡬλΆν μ μλ€.
μ μ₯ νμ μμ±
κΈ°λ³Έκ°μ μλ΅ν μ μκ³ λ°λμ κ° μ΄κΈ°νν΄μΌ νλ€.
μμ±μλ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ κ²μ΄κ³ νμ μ체λ μ΄κΈ°ννμ§ λͺ»νλ€. λ°λΌμ νμ μμ±μ μμ±μμμ μ΄κΈ°νν μ μλ€.
μ μ₯μμ±μ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°νν λ ν¨κ» μ΄κΈ°ν λμ§λ§, νμμμ±μ νμμ μ΅μ΄λ‘ μ κ·Όν λ κ°μ΄ μ΄κΈ°νλλ€.
μμ±μ μ κ·Όν λλ μΈμ€ν΄μ€ μ΄λ¦μΌλ‘ μ κ·Όνμ§ μκ³ , λ°λμ νμ μ μ΄λ¦μΌλ‘ μ κ·Όν΄μΌνλ€.
ν΄λμ€ / ꡬ쑰체 / μ΄κ±°νμ κ°μ²΄μ κ°μ μ μ₯νλ€.
μ μ₯λ κ°μ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅μΌλ‘ μ¬μ© κ°λ₯νλ€.
- static : ν΄λμ€ / ꡬ쑰체 / μ΄κ±°ν νμ μμ νλ‘νΌν° μ μΈ
- class : ν΄λμ€ νμ μμ μ μΈν μ°μ° νλ‘νΌν° μΌλΆ
νμμμ±μ κΈ°λ³Έμ μΌλ‘ μ§μ° μμ±μ΄λ€. λ°λΌμ μμ±μ μ²μ μ κ·Όνλ μμ μ μ΄κΈ°ν λλ€.
class Math {
static let pi = 3.14
}
let m = Math() //μμ§ μ΄κΈ°ν μλ¨
m.pi // μ€λ₯
Math.pi //μ΄λ μ΄κΈ°ν λ¨
κ³μ° νμ μμ±
enum Weekday: Int {
case Sunday = 1, monday, tuesday, wednesday, thursday, friday, saturday
static var today: Weekday {
let cal = Calendar.current
let today = Date()
let weekday = cal.component(.weekday, from: today)
return Weekday(rawValue: weekday)!
}
}
Weekday.today //μ€λμ΄ μμμΌμ΄λΌμ monday 리ν΄
π Reference
https://velog.io/@niro/Swift-Property-Computed-Property-%EA%B3%84%EC%82%B0-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0
https://singularis7.tistory.com/56
'π iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ Swift κΈ°μ΄ λ¬Έλ² ] ν΄λ‘μ (Closure) (0) | 2024.06.25 |
---|---|
[ Swift κΈ°μ΄ λ¬Έλ² ] νλ‘ν μ½ (Protocol) (0) | 2024.06.25 |
[ Swift κΈ°μ΄ λ¬Έλ² ] ν΄λμ€ μμ (0) | 2024.06.04 |
[ Swift κΈ°μ΄ λ¬Έλ² ] ν΄λμ€(Class)μ ꡬ쑰체(Struct) (0) | 2024.05.19 |
[ Swift κΈ°μ΄ λ¬Έλ² ] μ΄κ±°ν(Enumeration) (0) | 2024.05.17 |