Aben's Blog

vuePress-theme-reco Aben    2020 - 2025
Aben's Blog Aben's Blog

Choose mode

  • dark
  • auto
  • light
Home
Category
  • Docker
  • Node.js
  • golang
  • iOS
  • macOS
Tag
TimeLine
More
  • GitHub
  • Backend
author-avatar

Aben

21

Article

24

Tag

Home
Category
  • Docker
  • Node.js
  • golang
  • iOS
  • macOS
Tag
TimeLine
More
  • GitHub
  • Backend

Binding @Environment to @Binding value.

vuePress-theme-reco Aben    2020 - 2025

Binding @Environment to @Binding value.

Aben 2021-08-13 00:24:05 SwiftUIEnvironmentBinding
class AlbumViewModel: ObservableObject {
    @Published var currentAssetLocalIdentifier: String?
}

extension EnvironmentValues {
    var albumViewModel: AlbumViewModel {
        get {
            return self[AlbumViewModelKey.self]
        }
        
        set {
            self[AlbumViewModelKey.self] = newValue
        }
    }
}

private struct AlbumViewModelKey: EnvironmentKey {
    static let defaultValue: AlbumViewModel = AlbumViewModel()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

    @Environment(\.albumViewModel) var albumViewModel: AlbumViewModel
    
    
    var body: some View {
      ...
      
      /// @Environment unlike @StateObject, can not using $albumViewModel.$currentAssetLocalIdentifier.
      TabView(selection: .init(get: {
                        albumViewModel.currentAssetLocalIdentifier
                    }, set: { id in
                        albumViewModel.currentAssetLocalIdentifier = id
                    })) {
                    
                    ....
    
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18