Property Wrapper ๋?
Swift์์ property wrapper๋ ์์ฑ์ ๊ฐ์ธ๊ณ ์ถ๊ฐ ๋์์ ์ ๊ณตํ๋ ๋ํผ(wrapper) ํ์ ์ ๋๋ค.
Property Wrapper์ ์ฅ์
Property Wrapper๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ด๋ฉฐ, ์์ฑํด์ผ ํ๋ ์ฝ๋ ์์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
Swift์ ์ด๋ฏธ ์กด์ฌํ๋ Property Wrapper
1. @IBOutlet - Interface Builder์ ์์ธ๋ ์ ๋ํ๋ด๋ฉฐ, ํด๋น ์ธํฐํ์ด์ค ์์์ ์ฐ๊ฒฐ๋ ์์ฑ์ ์ ์ธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
2. @Published - SwiftUI์ ObservableObject ์์ฑ์ ๋ํ๋ด๋ฉฐ, ํด๋น ์์ฑ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง๋ค observer์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆฌ๋๋ก ํฉ๋๋ค.
3. @EnvironmentObject - SwiftUI์์ ํ๊ฒฝ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ฉฐ, ์ ์ญ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
4. @State - SwiftUI์์ ์ฌ์ฉ๋๋ฉฐ, ํด๋น ์์ฑ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง๋ค UI๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋๋๋ก ํฉ๋๋ค.
5. @ObservedObject - SwiftUI์์ ObservableObject ์์ฑ์ ๋ํ๋ด๋ฉฐ, ํด๋น ์์ฑ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง๋ค UI๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋๋๋ก ํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ Property Wrapper
Swift 5.1๋ถํฐ๋ ์ฌ์ฉ์ ์ ์ ์์ฑ ๋ํผ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. @propertyWrapper ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ ๋ํผ๋ฅผ ์ ์ํฉ๋๋ค.
์์ฑ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌ, ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ฐ์ ธ์ค๊ธฐ ์ ์ ๋ณํ ๋ฑ์ ์ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ EmailValidation ์์ฑ ๋ํผ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
@propertyWrapper
struct EmailValidation {
private var value: String = ""
var wrappedValue: String {
get { value }
set {
if newValue.isValidEmail {
value = newValue
} else {
print("Invalid email address")
}
}
}
}
extension String {
var isValidEmail: Bool {
// ์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฌ ๋ก์ง
return true
}
}
class User {
@EmailValidation var email: String
}
let user = User()
user.email = "invalid" // Invalid email address ์ถ๋ ฅ
user.email = "test@test.com" // email ์์ฑ์ ๊ฐ ์ ์ฅ
์์ ์์ ์์, EmailValidation ์์ฑ ๋ํผ๋ wrappedValue๋ฅผ ๊ฐ์ธ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. User ํด๋์ค์์ @EmailValidation ์์ฑ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ email ์์ฑ์ ์ ์ํฉ๋๋ค. email ์์ฑ์ ๊ฐ์ ํ ๋นํ๋ฉด wrappedValue์ setter๊ฐ ํธ์ถ๋๊ณ , ์ ํจ์ฑ ๊ฒ์ฌ ํ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
'๐ Apple > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Result ํ์ (0) | 2023.12.26 |
---|---|
[Swift] dropFirst()์ removeFirst()์ ์ฐจ์ด (0) | 2023.09.01 |
์ฑ๊ธํค ์ฌ์ฉ ์ private init() ํ๋ ์ด์ (0) | 2022.11.21 |
[Swift] list ์ ๋ ฌ (0) | 2022.10.13 |
[Swift] DateFormatter์ ์ฌ์ฉํ์ฌ string์ dateํ์์ผ๋ก ๋ณํํ๊ธฐ (0) | 2022.10.13 |