[SwiftUI] 코드 중복 실행 문제

2023. 11. 1. 17:36·Swift/개발
728x90

이슈

iWaver 프로그램을 개발하는데 이슈가 있었습니다.

저희 프로그램에 있는 기능 중에 유저가 선택한 파일 경로를 보여주는 기능이 있습니다.

아래 GIF를 보시면 선택된 폴더로 저장위치가 바뀌는 것을 볼 수 있습니다.

 

여기서 이슈가 발생했습니다..!

아래 GIF를 보시면 코드가 한 번만 실행이 되어도 되는 코드인데 계속 여러번 반복 되어서 실행이 되었어요 😲

이 문제의 원인은 바로 View안에 함수가 들어가 있기 때문입니다!

View안에 함수가 들어가게 된다면 아래 같은 문제가 발생하게 됩니다.

해당 함수가 호출될 때마다 View가 변경되었다고 판단하여 다시 렌더링을 수행하게 됩니다.

이것이 필요한 동작이 아니라면 불필요한 리렌더링으로 성능에 영향을 줄 수 있습니다.

저희 같은 경우 아래 코드가 View 안에 들어가 있었기 때문에 View가 랜더링 될 때마다 getLastDir 함수가 실행이 되는 것 입니다..!! 🤯🤯🤯🤯

Text("\\(getLastDir(savePath: saveFileVM.numbersFile.savePath))")

해결

View안에 있는 함수를 NSOpenPanel 에서 폴더를 지정하고 확인을 눌렀을 때 실행 할 수 있게 바꿔주었습니다

그 결과 View와 관련없이 여러 번 실행이 안되게 바뀌었습니다..! 👍🏻👍🏻👍🏻👍🏻👍🏻

private func selectFolder() {
        let dialog = NSOpenPanel();
        
        dialog.showsResizeIndicator = true;
        dialog.showsHiddenFiles = false;
        dialog.canChooseFiles = false;
        dialog.canChooseDirectories = true;
        dialog.canCreateDirectories = true;
        
        if (dialog.runModal() ==  NSApplication.ModalResponse.OK) {
            let result = dialog.url
            if (result != nil) {
                let path: String = result!.path
                print("path result: \\(path)")
                isButtonActive = true
                saveNumbersFilePath = getLastDir(savePath:path)
            }
        } else {
            // User clicked on "Cancel"
            return
        }
    }

 

 

728x90

'Swift > 개발' 카테고리의 다른 글

[Swift] Memory Leaks 해결  (0) 2024.09.19
[SwiftUI] UI 최적화 문제  (1) 2024.01.12
[Swift] 이미지 저장 기능  (0) 2023.10.31
[Swift] 폴더 이름 중복 검사  (1) 2023.10.28
[SwiftUI] View가 멈추는 현상  (0) 2023.10.25
'Swift/개발' 카테고리의 다른 글
  • [Swift] Memory Leaks 해결
  • [SwiftUI] UI 최적화 문제
  • [Swift] 이미지 저장 기능
  • [Swift] 폴더 이름 중복 검사
bulmang
bulmang
모바일 개발자 도전
  • bulmang
    bulmang
    bulmang
  • 전체
    오늘
    어제
    • 분류 전체보기 (208)
      • 알고리즘 (68)
        • List (3)
        • Two Pointer (6)
        • Binary Search (4)
        • Prefix Sum (3)
        • Sort (4)
        • Brute Force (5)
        • Array (2)
        • String (4)
        • 프로그래머스 (12)
        • 백준 (9)
        • Queue (2)
        • Stack (2)
        • Recursion (12)
      • Computer Science (16)
        • Computer Architecture (6)
        • Operating System (5)
        • Network (2)
        • 기타 (2)
        • System Programming (1)
      • Swift (70)
        • 개발 (24)
        • 정리 (25)
        • 문법 (20)
      • Flutter (24)
      • 기타 (12)
        • 후기 (12)
      • Git (6)
      • Ios 오픈소스 (5)
      • UI 디자인 (5)
      • AppleScript (2)
  • 링크

    • Notion
    • Github
  • 태그

    Java
    Swift
    문법
    til
    재귀
    자료구조
    riverpod
    today i learned
    코딩테스트
    Apple Developer Academy
    백준
    SwiftUI
    알고리즘
    협업
    컴퓨터구조
    개발
    FLUTTER
    IOS
    Xcode
    피플
  • 최근 댓글

  • 최근 글

  • 인기 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.2
bulmang
[SwiftUI] 코드 중복 실행 문제
상단으로

티스토리툴바