코딩 시작 [3부]

마지막으로 저번 포스트에서 제 설명을 드린 후, 시간이 되었습니다. 내 문제를 해결하고 새로운 언어를 배우기 위해 애플리케이션 코딩을 시작합니다.

프로젝트 설정



Xcode에서 프로젝트를 시작하는 것은 쉽습니다. IDE를 열고 새 프로젝트를 시작하면 바로 사용할 수 있습니다.

나는 항상 git-repository를 추가하는 것으로 시작하여 프로젝트의 특성에 따라 내 원격 저장소 또는 내 GitHub 계정에 연결합니다. 처음부터 소스 제어를 갖는 것은 매우 중요합니다. 작업 복사본으로 되돌리거나 분기를 만들어 테스트할 수 있습니다. 로컬 git만 사용하는 경우에도 마찬가지입니다. 그만한 가치가 있습니다.

이름 찾기



이름을 찾는 것은 까다로울 수 있지만 이 프로젝트에서는 그냥 당연한 것을 선택했습니다. 응용 프로그램은 한 위치에서 다른 위치로 파일을 이동해야 합니다. 그것은 그것들을 다른 장소에 저장합니다. 그래서 StoreAway입니다.

코딩



어디에서 코딩을 시작해야 하는가는 항상 중요한 질문입니다. 임베디드 개발자로서 저는 백엔드에서 시작하는 경향이 있습니다. 파일 처리를 구현하는 것은 저에게 좋은 첫 번째 작업처럼 보였습니다. 삶을 좀 더 쉽게 만들기 위해 구현에 도움이 되도록 SwiftUI 사용자 인터페이스를 설정했습니다.



예, 기능을 호출할 수 있는 버튼일 뿐입니다. 간단하게 시작하십시오. 응용 프로그램을 다시 시작하지 않고 함수를 호출하는 데 많은 도움이 됩니다. 디버깅이 훨씬 쉬워집니다.

첫 번째 문제



내 첫 번째 목표는 특정 파일 유형의 모든 파일을 폴더에 가져오는 것이었습니다. 이 목표를 달성하기 위해 FileManager을 사용했습니다. 이 인터페이스를 사용하면 파일 시스템에 액세스하고 finder에서 알고 있는 모든 작업을 수행할 수 있습니다.

하지만 문제가 있었습니다. 파일 시스템에 액세스할 수 없습니다. Xcode의 프로젝트는 기본적으로 샌드박스 환경입니다. 모든 macOS 사용자는 전체 디스크 액세스를 활성화하려는 Alfred와 같은 앱의 이러한 대화 상자를 알고 있습니다. 나 자신을 위한 응용 프로그램에서 정말 그것을 원합니까?

처음에는 아닙니다. 소규모 프로젝트에서 이와 같은 문제로 인해 중단하지 마십시오.
샌드박싱을 구현해야 합니까? 나중에 응용 프로그램을 판매하려는 경우 절대적으로 필요합니다.

나는 그것을 팔 계획이 없으며 단지 언어를 배우고 싶을뿐입니다. 그래서 자격 파일을 제거하고 파일 처리기 코딩을 시작했습니다.

통사론



이 프로젝트의 목표 중 하나는 Swift와 유사한 구문을 사용하고 내 C++ 루트로 돌아가지 않는 것이었습니다.

func getFilesInFolder( path: URL, filetype: String) -> [URL] {
    let enumerator = fm.enumerator(atPath: path.path)
    let files = (enumerator?.allObjects as! [String]).filter{$0.lowercased().contains(filetype.lowercased())}

    var file_url : [URL] = []
    for f in files{
      let path = URL(fileURLWithPath: path.path).appendingPathComponent(f)
      file_url.append(path)
    }
     return file_url
   }


내 코드를 본 후에 확신이 서지 않았습니다. 내 구현이 매우 Swift와 비슷합니다. 또 다른 리팩토링 후 결과는 다음과 같습니다.

func getFilesInFolder( path: URL, filetype: String) -> [URL] {

    let resourceKeys = Set<URLResourceKey>([.nameKey])
    let enumerator = fm.enumerator(at: path, includingPropertiesForKeys: Array(resourceKeys), options: .skipsHiddenFiles)
    let files = (enumerator?.allObjects as! [URL]).filter{$0.pathExtension.contains(filetype.lowercased())}

    return files

  }


리팩토링이 중요합니다. 그러나 작동하면 작동합니다! 코딩하는 경우, 특히 초보자로서 코드 형식에 대해 너무 많이 생각하지 마십시오. 언어를 많이 사용할수록 스타일이 좋아집니다.

first versions of the application은 이미 완료되었으며 시간이 지남에 따라 더 많은 기능이 추가됩니다. 나는 이것을 작은 시리즈로 계속하고 싶다. 새로운 프로그래밍 언어를 배우고 내 문제를 해결하기 위한 여정에서 다음 주에 더 많은 이야기를 게시합니다.

Pixabay의 StockSnap 이미지 - 감사합니다!

좋은 웹페이지 즐겨찾기