* Swift 배운지 얼마되지 않았습니다. 양해바랍니다 :)
- Swift / SwiftUI를 배우다보면 다른 언어에서 볼 수 없는 것들이 많은 것 같습니다.
- 그러다보니 좀 생소한 표현법들이 많은 것 같아요.
- KeyPath도 좀 그런 느낌이긴한데...
\. 는 Swift의 KeyPath를 나타내는 문법입니다.
- 타입 안전한 방식으로 객체의 속성에 접근할 수 있게 해줍니다.
그럼 예시코드를 살펴보겠습니다.
import SwiftUI
struct ContentView : View{
@Environment( /.layoutDirection ) var layoutDirection : LayoutDirection
var body : some View{
Text(layoutDirection == .leftToRight ? "Left to Right", "Right to Left")
.padding()
}
}
struct ContentView_Previews : PreviewProvider{
static var previews : some View{
ContentView()
}
}
먼저 예제에서는 Environment 속성을 사용하여 현재 환경의 layoutDirection을 가져옵니다.
\.layoutDirection은 EnvironmentValues 구조체에 정의된 layoutDirection KeyPath를 나타냅니다.
이 KeyPath를 통해서 SwiftUI는 환경에서 해당 값을 가져와서 화면에 그릴 수 있습니다.
따라서 \.는 KeyPath의 시작을 나타내며, KeyPath를 사용하면 타입 안전한 방식으로 객체의 속성에 접근하고 사용할 수 있습니다.
그럼 궁금한 게 생깁니다.
EnvironmentValues 구조체는 어떤 것일까.
EnvironmentValues 구조체는 어떤 역할을 할까?
EnvironmentValues 구조체는 SwiftUI에서 다양한 [환경값]을 저장하고 제공하는 역할을 한다.
Swift UI 내부적으로 정의되어있고, 우리가 직접 정의할 필요는 없다.
그러나, 커스텀 환경 값을 추가하고 싶을 때는 EnvironmentKey 프로토콜을 구현하여 새로운 키를 만들 수 있다.
// 1. 커스텀 환경 키 정의
import Swift UI
// 커스텀 환경 키를 정의하는 구조체
struct CustomEnvironmentKey : EnvironmentKey{
static let defaultValue : String = "Default Value"
}
// 2. EnvironmentValues에 커스텀 키 추가하기
extension EnvironmentValues{
var customValue : String{
get { self[CustomEnvironmentKey.self] }
set { self[CustomEnvironmentKey.self] = newValue }
}
}
// 3. 커스텀 환경 값을 사용하는 뷰 정의하기
struct ContentView : View{
@Environment(\.customValue) var customValue : String
var body : some View{
Text("Custom Environment Value : \(customValue)")
.padding()
}
}
// 4. 커스텀 환경 값을 설정하고 전달하기
struct ParentView : View{
var body : some View{
ContentView()
.environment(/.customValue, "Hello Swift UI!")
}
}
'Ios > Swift UI' 카테고리의 다른 글
이것저것 Swift 메모용(찾아갈만한게 있을 수도 있고 없을 수도 있어요) (3) | 2024.07.23 |
---|---|
@Environment로 커스템 데이터모델을 환경에서 가져오기 (4) | 2024.07.22 |
@Binding 과 .constant에 대해서 알아봅시다 (0) | 2024.07.22 |
@Observable, @ObservedObject 를 알아봅시다 (0) | 2024.07.19 |
계산된 속성 (0) | 2024.07.18 |