본문 바로가기
공부/스위프트

[스위프트] .fileImporter()로 파일 불러오기

by 초코팅촉 2024. 6. 17.
728x90

이번에는 SwiftUI에서 macOS일때 파일 불러오기를 해볼겁니다.

스유에는 .fileImporter라는 아주 좋은 메서드가 있죠.
.fileImporter가 실행될 경우

.fileImporter 실행시

위와같이 파일을 불러오기위해 Open 버튼이 달려서 나오는 패널이 열립니다.

맥 많이 써보신분들은 익숙하죠?

기본적인 형태는 다음과 같습니다.
.fileImporter(isPresented:allowedContentTypes:allowsMultipleSelection:onCompletion:)

그럼 어떻게 쓰는지 알아볼까요?

예시코드

Button("Open") {
    openBool.toggle()
}
.fileImporter(isPresented: $openBool,
              allowedContentTypes: [.plainText])
{ result in
    switch result {
    case .success(let file):
        guard let url = URL(string: file.absoluteString) else {
            print("there's no file")
            return
        }
        print(url)
        
    case .failure(let error):
        print(error.localizedDescription)
    }
}

파라미터가 여러가지가 있지만 allowsMultipleSelection는 안써도 상관없습니다.

 

파라미터

1. isPresented

isPresented는 import 패널을 여는것을 위한 트리거로 Binding<Bool>이 들어갑니다.

그래서 위에 보시면 버튼이 눌리면 openBool이 토글되죠.

2. allowedContentTypes

불러오기에 사용할 수 있는 확장자를 결정하는 [UTType]을 받습니다.

여러가지 종류를 열 수도있으니까 배열로 받습니다.(ex. 이미지)

3. allowsMultipleSelection

다중 선택의 여부를 물어보기위한 파라미터입니다.

4. onCompletion

메서드가 실행되고 나서 실행될 탈출 클로저를 써줍니다.

후행클로저로 쓰면 이쁘겠죠?

 

onCompletion

이 클로저에서는 Result를 파라미터로 받아 Void를 반환합니다.

해서 이친구는 성공과 실패, 두가지 경우로 나뉜다고 합니다.

그래서 7번째줄부터 보면 있는 switch문에 case가 두가지입니다.

 

.success : 정상적으로 불러왔을때 여기에 걸립니다. 그리고 불러온 file을 가져옵니다.

이때 가져온 file에 접근해서 url을 쓴다거나 할수있죠.

위의 예제에서는 가져온 file의 경로를 뽑아내서 출력합니다.

 

.failure : 불러오는데에 실패하면 여기에 걸립니다. 발생한 error를 가져옵니다.

 

그렇게 막 어렵진 않죠? 확실히 SwiftUI가 UIKit, AppKit에 비해서 상대적으로 쉬운거 같긴 합니다..

 

마지막으로 애플 공식문서입니다.

 

fileImporter(isPresented:allowedContentTypes:allowsMultipleSelection:onCompletion:) | Apple Developer Documentation

Presents a system interface for allowing the user to import multiple files.

developer.apple.com