[Programmers/Swift] Lv.0 배열 원소의 길이
·
알고리즘/프로그래머스
배열 원소의 길이문제 설명문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.제한사항1 ≤ strlist 원소의 길이 ≤ 100strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.입출력 예 코드import Foundationfunc solution(_ strlist:[String]) -> [Int] { let result = strlist.map { $0.count } return result} Mapmap 함수는 고차 함수로, 컬렉션의 각 요소에 변환 작업을 적용하여 새로운 컬렉션을 생성합니다!간결하고 함수형 프로그래밍 스타일을 지원하며, 루프와 조건문을 줄여 가독성을 ..
[SwiftDataStructure&Algorithms] 기본 데이터 구조(배열, 딕셔너리)
·
SwiftUI/정리
스위프트 표준 라이브러리 활용 표준 라이브러리의 개념은 무척 넓고 다양하다 라이브러리에서 정의한 다양한 프로토콜을 적용할 수 있는 버용 구조체와 열거형을 통해 다양한 기능 제공 Array.append() 함수 예시 해당 배열의 저장 내용을 다른 뱅려과 실시간으로 공유하지 않을 경우 알고리즘의 복잡성 $O(1)$만큼 커짐 함수 실행을 위해 해당 배열을 브릿징한 NSArray로 래핑해야 하며, 그렇지 않을 경우 알고리즘의 효율성은 매우 낮아짐 애플이 구조체를 사용하는 이유 객체지향형 언어를 이용해서 프로그래밍을 했다면, 원하는 타입을 만들기 위해 클래스라는 구조 또는 개념을 사용해 왔을 것 하지만 스위프트 표준 라이브러리에서는 이와 같은 용도로 클래스를 사용하지 않음 스위프트에 정의된 타입 대부분은 구조체 ..
[SwiftDataStructure&Algorithms] 데이터 구조
·
SwiftUI/정리
1강 플레이그라운드 살펴보기 데이터 구조의 중요성 효율성 유지 보수성 확장성 데이터 활용을 위한 체계화 방법 (데이터의 공유,유지,정렬,검색 등) 데이터 구조 + 알고리즘 = 프로그램 데이터 추상화(abstraction)기법 데이터가 지닌 복잡성을 관리하기 위한 기술 데이터 구조를 디자인 추상화를 사용하는 이유 내부의 구현방식을 몰라도 되도록 하기 위함, 개발자는 더욱 쉽게 사용할 수 있다. 문제를 해결하기 위한 패턴 스위프트 REPL 스위프트 컴파일러(Read-Eval-Print-Loop) 즉시 코드를 실행하고 결과를 도출 값을 별도로 할당하지 않았을때 REPL이 직접 $R0라는 변수를 생성해서 값을 할당 기본적인 데이터 구조 배열 & 포인터 인접 데이터 구조: 데이터 메모리 영역중 인접한 부분에 저장..
[Programmers/Swift] Lv.0 중복된 숫자 개수
·
알고리즘/프로그래머스
문제 설명정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return 하도록 solution 함수를 완성해보세요. 제한사항1 ≤ array의 길이 ≤ 1000 ≤ array의 원소 ≤ 1,0000 ≤ n ≤ 1,000 예시 첫 풀이func solution(_ array:[Int], _ n:Int) -> Int { var result = 0 // 배열 길이 제한, 정수 n 크기 제한 guard array.count >= 1, array.count = 0, n 1000 || $0 guard를 사용하여 배열 길이, 요소를 제한 하였는데 return 0을 하는 것이 오히려 답을 틀리게 나왔다.나머지 사람들이 푸는 것을 보니 제한사항으로..
[SwiftUI] UI 최적화 문제
·
SwiftUI/개발
안녕하세요 불망입니다 현재 사이드 프로젝트인 iWaver를 진행중에 있는데 문제가 생겼습니다. iWaver는 Apple Developer Academy@Postech에서 진행한 마지막 프로젝트입니다. 오늘은 최적화를 진행하면서 어떤 문제가 있었는지 어떻게 해결했는지 글을 작성해봤습니다. 문제 상황 현재 프로젝트를 진행하면서 발견된 문제점이 있습니다. 저희 프로그램 주요 기능 중 하나인 PDF파일을 Image로 변경하여 사용자가 원하는 이미지들을 골라서 원하는 배치공간에 이미지 파일들을 넣을 수 있는 기능이 있습니다. 사용자가 원하는 배치공간에 이미지를 넣고 확인을 하면 자동으로 Numbers 프로그램에 사용자가 정해둔 공간에 이미지가 자동으로 들어가게 됩니다. PDF파일을 Image로 변경된 구간을 Ma..
XCODE IOS 프로파일링 디버깅 하는 방법
·
SwiftUI/정리
안녕하세요 불망입니다..! 개발을 하다보면 어플이 멈추거나 강제종료되는 경우가 있습니다..! :( 그 이유로는 메모리 부족이나 누수이거나 교착상태, 경쟁 상태 등 다양한 이유가 있을 수 있습니다. 정확한 원인 분석을 하기 위해서는 프로파일링을 하거나 디버깅을 해야합니다. 메모리 누수나 부족 교착상태 등등을 찾아보려면 프로파일링해보는 것이 제일 정확한 방법입니다. 1. XCODE 프로파일링 XCODE 프로파일링이란 앱 성능 및 리소스 사용을 분석하고 최적화하는 과정을 뜻합니다. 앱이 실행하는 중에 발생하는 이슈에 대해서 모니터링 할 수 있고 메모리누수, 에너지효율성, 메모리할당 과정 등을 전반적으로 훓어볼 수 있습니다. 단순 출력으로는 잡아내기 힘든 성능 이슈나 메모리 부분을 주로 관찰 및 분석합니다. 디..
[SwiftUI] 아키텍처 고민
·
SwiftUI/정리
아키텍처 Toucher 개발을 리펙토링 하면서 제일 먼저 한 고민은 "어떤 아키텍처를 해야하는 것인가,,?" 이었습니다. 일단 저희한테 맞는 아키텍처를 찾으려면 어떠한 아키텍처가 SwiftUI 에서 사용이 되는지 알아봤어야 했기에 간단하게 서치를 해봤습니다. MVC Model-View-Controller 주로 UIkit에서 이용을 합니다. SwiftUI에서는 아래와 같은 이유로 사용을 지양하고 있습니다. SwiftUI는 선언적인 구문을 사용하여 UI를 정의합니다. 원하는 결과를 선언하고 프레임워크가 알아서 상태 및 레이아웃을 관리합니다. SwiftUI는 바인딩(Binding) 및 상태 속성(State Property)과 같은 반응형 프로그래밍 개념을 도입하여 UI 요소를 데이터에 쉽게 바인딩할 수 있습니..
[회고록] Toucher 후기 1편 (Apple Developer Academy)
·
기타/후기
안녕하세요 불망입니다,,! 12월달에 아카데미를 수료하고 휴식하다가 2024년이 되어서야 그 동안 개발하느라 회의하느라 노느라 미뤄 놓았던 회고를 합니다..! MC2란 Mini Challenge 2로 두번째 프로젝트라고 생각하시면 될 것 같습니다. 소개해드릴 앱은 앱 스토어에 배포를 하였습니다. 아래 링크에서 확인하실 수 있습니다. https://apps.apple.com/kr/app/toucher/id6474778455 나의 역할 두번째 프로젝트를 소개하기 앞서 저에 역할에 대해서 알려드리겠습니다. 이번에 저는 다양한 경험을 해보고 싶었습니다. 저는 프로젝트를 진행하면서 쌓은 경험은 저에게 큰 도움을 주고 앞으로 어떤 문제가 발생할 때 다양한 경험이 그것을 해결해 줄 수 있다고 생각하는 사람입니다. 그..
[SwiftUI] 코드 중복 실행 문제
·
SwiftUI/개발
이슈 iWaver 프로그램을 개발하는데 이슈가 있었습니다. 저희 프로그램에 있는 기능 중에 유저가 선택한 파일 경로를 보여주는 기능이 있습니다. 아래 GIF를 보시면 선택된 폴더로 저장위치가 바뀌는 것을 볼 수 있습니다. 여기서 이슈가 발생했습니다..! 아래 GIF를 보시면 코드가 한 번만 실행이 되어도 되는 코드인데 계속 여러번 반복 되어서 실행이 되었어요 😲 이 문제의 원인은 바로 View안에 함수가 들어가 있기 때문입니다! View안에 함수가 들어가게 된다면 아래 같은 문제가 발생하게 됩니다. 해당 함수가 호출될 때마다 View가 변경되었다고 판단하여 다시 렌더링을 수행하게 됩니다. 이것이 필요한 동작이 아니라면 불필요한 리렌더링으로 성능에 영향을 줄 수 있습니다. 저희 같은 경우 아래 코드가 Vi..
[Swift] 이미지 저장 기능
·
SwiftUI/개발
프로젝트를 진행하면서 고민해야 할 부분이 생겼습니다. 저희 프로그램은 Pdf→ Image → Numbers 로 변환을 해주는 프로그램입니다. 이때 여러 PDF 파일에서 Numbers로 변환할 Image들만 맥북에 저장을 하고 저장한 Image들을 Numbers 파일에 삽입 후 Image를 삭제합니다. 어떻게 개발을 해야할지 고민을 해봤습니다. 이미지 저장 Flow (개발) PDF에서 선택된 이미지만 유저가 지정한 경로에 iWaverTemp폴더(🗂️)에 저장이 됩니다. 이 폴더는 Numbers 파일 생성이 완료되면 자동으로 삭제됩니다. 예시) 유저가 3개의 Numbers 파일을 생성한 경우 🗂️ iWaverTemp ├──🗂️ 유저가 정한 numbers1 파일 이름 │ ├── Image0 ~ Image30 ..
[Swift] 폴더 이름 중복 검사
·
SwiftUI/개발
서론 Apple Developer Academy에서 마지막 프로젝트를 진행하면서 만든 기능에 대해서 적었습니다. 유저가 지정해둔 경로에 유저가 정해둔 파일 이름이 있다면 다른 이름으로 저장을 해줘야 하는 기능을 만들어야 했습니다. 첫 번째로 해줘야 할 작업은 유저가 지정해둔 경로에 어떤 이름들이 있는지 알아야 했습니다. 저희 프로그램은 PDF → Image → Numbers로 변환해주는 프로그램인데 PDF에서 이미지로 변환해준 것들을 새로운 폴더에 지정해서 저장해주고 Numbers로 변환 후 삭제 하였습니다. 그렇다면 제가 어떻게 중복검사를 했는지 설명하겠습니다. 유저가 지정한 경로에 파일 및 폴더 이름 확인 첫번째로, 해야할 일은 유저가 지정한 경로에 어떠한 이름들이 있는지 확인해야 했습니다. sear..
[Xcode, Git] Bundle Id 변경하지 않고 협업하기
·
Git
Bundle Id 변경하지 않기안녕하세요 불망입니다~!애플 디벨로퍼 아카데미에서 여러 개발자분들과 협업하면서 Bundle id 계속 교체 했었는데요.Github에 다른 개발자 분께서 Merge하셨을 때 번들아이디를 계속 제거로 수정해줘야 하는 일이 너무 번거로웠습니다.그래서 마지막 프로젝트에서는 번들아이디를 교체하지 않고 협업하려고 설정하였습니다. 저희 팀원께서 알려주셔서 저도 문제 없이 사용할 수 있었습니다. 감사합니다 👍순서대로 따라하시면 문제없이 작동합니다~!1번Target - Build Settings - Packaging 에서 Product Bundel Identifier 를 더블클릭하여 $(PRODUCT_BUNDLE_IDENTIFIER)를 입력해줍니다2번Target - Build Settin..
[SwiftUI] View가 멈추는 현상
·
SwiftUI/개발
서론 안녕하세요 불망입니다! 이번에 ADA 마지막 프로젝트 개발 작업을 하면서 제가 뷰가 멈추는 현상에 직면했습니다. 그 문제를 해결하는 내용을 작성해봤습니다! 보시고 틀린 점이나 피드백 주실 부분 댓글로 남겨주시면 감사하겠습니다~! 문제 현상 ImageLoadingView 에서 유저가 선택한 PDF 파일을 Image로 변경할 때 뷰가 얼어버리는 현상이 생겼습니다. 눈으로 확인하시면 더 쉬우실 것 같아서 gif 파일을 보면 좋을 것 같아요 저희 코드에는 convertPDFToImages함수가 있는데 Pdf를 Image로 변경시켜주는 함수 입니다. 이 함수가 실행이 시작 되는 코드는 LoadingView가 나타나면(.onAppear) 실행이 됩니다. LoadingView가 나타나는 조건은 파일이 선택되었을..
[SwiftUI] 프로그램 차단 기능
·
SwiftUI/개발
작업 내용 프로그램 사용성 검증을 하기 위해서 우리의 Target인 선생님들에게 MVP(Minimum Viable Product)를 UT(User Test)를 해야하는 작업이 생겼습니다. UT를 진행하면서 UT동안만 프로그램을 사용할 수 있게 프로그램을 승인 및 차단하는 기능을 만들어야 합니다. 절차 TimeFetcher클래스안에 있는 fetchTime함수를 이용하여 서버에서 Json파일을 디코딩 하여 시간(date)을 가져옵니다. formatterDate를 통하여 Date Type을 String Type으로 변경하여 currentTime 변수에 넣어줍니다. checkTimeFormat함수를 이용하여 currentTime시간을 settingHour시간안에 속해 있을때만isAbled를 true로 값을 주어..
[AppleScript] Numbers 변환
·
AppleScript
현재 직면한 문제 현재 macOS App에서 applescript로 numbers app을 실행시키면 아래와 같은 오류가 발생합니다. AppleScript 실행 오류: { NSAppleScriptErrorAppName = Numbers; NSAppleScriptErrorBriefMessage = "Application isn\\U2019t running."; NSAppleScriptErrorMessage = "Numbers got an error: Application isn\\U2019t running."; NSAppleScriptErrorNumber = "-600"; NSAppleScriptErrorRange = "NSRange: {30, 8}"; } error -600 해결 방법 케이스 첫번째 방법..