인프런 커뮤니티 질문&답변

랑프_Langpeu님의 프로필 이미지

작성한 질문수

[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17

GallaryView

갤러리에서 슬라이더 변경시 gridSwitch 가 두번 실행됩니다.

24.05.16 09:06 작성

·

165

·

수정됨

0

안녕하세요. 이전 문의에 대한 답변 잘 확인했습니다.

답변 감사합니다.

    //GridLayout
    @Published var gridLayout: [GridItem] = [GridItem(.flexible())]
    @Published var gridColumn: Double = 4.0
    
    //init
    init() {
        gridSwitch()
    }
    
    //func
    func gridSwitch() {
        print("gridSwitch")
        gridLayout = Array(repeating: GridItem(.flexible()), count: Int(gridColumn))
    }

 

방금 실습 프로젝트 진도 마무리하고 grid 쪽 다시 보고 있는데요

gridSwitch() 함수에 print 넣고 체크해 보니

슬라이더 움직이면 위에 함수가 2번씩 호출됩니다.

 

gridLayout 과 gridColumn 2개 값이 @ObservedObject

되어 있어서 각각 변경이 되서 총 2번 호출되는건지요 ?

 

차후 저런 변수가 많이 들어가 있는 함수는

갯수만큼 호출될꺼 같은데. 어떻게 대응해야 하는지

효율적인 방식이 있는지 조언 부탁드려도 될까요 ?

 

 

 

강의 관련된 질문은 언제나 환영입니다 😄

  • 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요)

  • 마크다운을 사용해서 편리하게 글을 작성하세요

  • 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~

  • 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요

답변 2

0

Jacob(제이콥)님의 프로필 이미지
Jacob(제이콥)
지식공유자

2024. 05. 22. 07:35

안녕하세요 랑프님
코드를 질문 주신 코드 확인하였습니다.

자답 올려주신 부분 중복 호출 방지해서 해결하신 부분 알려주셔서 감사합니다.
예제 코드 수정하여서 재 업로드 하겠습니다.

0

랑프_Langpeu님의 프로필 이미지

2024. 05. 16. 09:21

자답 입니다.

gridSwitch() 호출은 GalleryView 내
Slider 에서 2번씩 호출하고 있네요.

 

보니깐

Slider 의 onEditingChanged: 는 터치 시작과
끝날때 2번 호출해 주고 있네요.


아래처럼 바꾸니 1회만 호출합니다.

slider 터치시 true (현재슬라이더값)

slider 손때면 false (현재슬라이더값)

이라서 false 에 맞춰서 작동하게 하니 1회만 호출되고
잘 작동 됩니다.

true 4.0

false 3.0

 vm.gridSwitch()

gridSwitch

 

//2. Slider
                    Slider(value: $vm.gridColumn, in: 2...4, step: 1) { value in
                        print("\(value) \(vm.gridColumn)")
                        if !value {
                            withAnimation(Animation.easeInOut(duration: 1.0)) {
                                print(" vm.gridSwitch()")
                                vm.gridSwitch()
                            }
                        }
                    }
                    .padding()