개발/Swift
-
[Swift] 베스트앨범 프로그래머스 코딩테스트개발/Swift 2022. 1. 3. 18:41
속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다. 모든 장르는 재생된 횟수가 다릅니다. 우선 문제 해결을 위해 주어진 장르와 재생수를 가지고 dictionary로 만든후에 해당 dictionary를 총 재생수를 기준으로 정렬 장르 내 재생수 에 따른 정렬 (재생수 같으면 고유번호참조) 앞에서 두개 뽑아서 배열에 넣어서 리턴(갯수 1개면 1개만 넣어줌) 우선 주어진값을 가지고 Dictionary를 만든다. 딕셔너리는 이런구조로 만들어 져야한다. ["classic": [2: 150, 0: 500, 3: 800], "po..
-
[Swift] 위장 프로그래머스 코딩테스트개발/Swift 2022. 1. 2. 15:03
우선 주어진 배열을 딕셔너리 타입으로 변환한다. 딕셔너리는 의상의 종류(키) : 의상의 갯수(값) 으로 구성된다. { "headgear" : 2 , "eyewear": 1 } 위 의상들을 조합할수있는 코디의 개수는 5개다. 모자는 총 두개이므로 3가지의 경우가 나온다. 1번 모자를쓰거나 2번 모자를 쓰거나 둘다 안쓸수도있다. 안경은 총 한개이므로 2가지 경우가 나온다. 1번 안경을 쓰거나 안쓸수도있다. 그럼 이 두개를 곱해주면 된다. 3 *2 = 6 그런데 아무거도 안입는 경우는 없다하니 -1 을 해주면 된다. 코드로 바꿔보자. func solution(_ clothes:[[String]]) -> Int { var dict = [String:Int]() var count = 1 // 곱셈을 사용해야하므로..
-
존재하는 프로젝트cocoapod private용으로 배포 하기개발/Swift 2021. 12. 27. 17:33
구글검색후 찾았던 cocoapod 배포 방법과 달리 나는 이미 존재 하는 프로젝트를 cocoapod 으로 배포 하고싶었다. 대부분의 예시에서는 애초에 시작을 프레임워크로 만들어 제공된 템플릿 안에서 구현하였다. 결론 부터 말하자면 이렇게 하는게 맞았다. 삽질하기(기존 프로젝트 기존 깃에서 그냥 올리기) 하지만 좀 복잡하기보다 간단하게 해결하고싶어서 해당 방법을 찾았었다. 존재하는 프로젝트 경로에서 pod spec create POD이름 를 실행한다. 그러면 POD이름.podspec 파일이 생긴다. podspec 을 보면 여러 세팅값들이 있는데 이중에서 내 프로젝트의 git 주소를 넣어준다. s.source = { :git => '깃주소', :tag => s.version.to_s } 변경 후에 pod s..
-
[Swift] Dynamic Dispatch / Static Dispatch개발/Swift 2021. 12. 20. 17:03
ios 면접 질문 리스트를 보던중 이런 문제를 보았다. class B: A 일 때 A와 B 둘다 func one()이라는 함수가 있으면 B 인스턴스나 A 인스턴스에서 이 함수를 호출했을때 둘 중 어떤 함수를 호출할지 어떻게 판단하는가? B는 자식 클래스, A는 부모 클래스이다 B와 A 모두 one()함수를 정의했다면 B(인스턴스).one()을 호출하면 B의 함수를 A.one()을 호출하면 A의 함수를 호출할것이다. 그러면 만약 자식 클래스인 B가 상속을 받지 않았다면? one 함수를 오버라이딩 하지 않았다면? 어떻게 어떤 함수를 쓸지 결정할수 있을까? 이게 가능한 것은 어떤 함수를 호출할지 컴파일 단계에서 결정짓지 않아서 가능하다. let instanceA = A() instanceA.one() //결정..
-
[Swift] frame이 다시 초기화 되는 오류 - translatesAutoresizingMaskIntoConstraints개발/Swift 2021. 12. 8. 17:43
요구사항 UI 의 사이즈가 isExpaned 상태에 따라 커졌다 작아져야함 Error showTwoButtonDialog를 실행하여 팝업을 띄우는경우 UI의 사이즈가 초기화 되어 isExpanded 상태와 반대가 되어버려 UI 오류가 발생함 1. 사이즈 변경 버튼 -> 모듈맵 커짐 - isExpaned = true 2. showPopup -> 모듈맵 보통 크기로 돌아옴 - isExpanded = true 3. 사이즈 변경 버튼 -> 모듈맵 작아짐 - isExpanded = false uiview 의 사이즈를 변경하는 함수 private func expandModuleMap(){ let currentFrame = self.moduleMapView.frame let newFrame = self.codingV..
-
[Swift] UIResponder 대략 알아가기개발/Swift 2021. 12. 1. 18:04
uiresponder 는 앱 이벤트 처리 백본을 구성한다? 무슨말인지 모르겠고 일단 이벤트에 대한 응답 처리를 위한 클래스임 UIApplication UIViewcontroller UIView 는 모두 리스폰더인데 (상위 클래스가 UIResponder임) 이벤트가 발생하면 앱의 리스폰더 객체에 전달함 (vc , view에 전달함) 터치, 모션 원격 등 이벤트를 처리하려면 리스폰더(vc,view) 가 해당 메소드를 오버라이드 하면댐 touchesBegan(_:with:) 등등... 만약 주어진 리스폰더가 이벤트를 처리하지 않는 경우 리스폰더 체인의 다음 이벤트로 해당 이벤트를 전달한다 → 앱이 이벤트를 받으면 그 이벤트를 처리할 대상을 찾으려고 계속 전달 과정을 거침 → 리스폰더가 처리 하지 않으면 (리스..
-
[Swift] PromiseKit 사용하여 콜백지옥 빠져나오기개발/Swift 2021. 11. 30. 18:10
아래 코드는 프로젝트(item) 를 생성 하기위해 input dialog 를 띄운후 입력값을 받은뒤 중복 체크를 하고 유효성에따라 프로젝트를 생성하는 코드이다. @objc func onTapEdit(_ gesture : UITapGestureRecognizer){ if let topVC = ViewManager.getTopViewController() { NavigationManager.showProjectCreateDialog(topVC) { (text,callBack) in self.projectViewModel.checkProjectName(title: text) { isExist in if(isExist){ callBack(.failure(CreateProjectError.existProjectN..
-
[Swift 코딩테스트] 프로그래머스 - 체육복개발/Swift 2021. 11. 29. 18:50
문제를 해결하기 위해 처음 생각했던것은 1.우선 멀쩡한 놈들을 계산한다. (전체 학생수 - lost 배열 길이) lost 배열을 반복문 돌린후에 2.Lost 배열 앞에번호를 가지고 reserve에 있는지 확인 3.없으면 뒷번호 reserve에 있는지 확인하여 4.있으면 count를 1 증가시키는 방식이었다. 몇가지 테스트에 합격하지 않아 추가적으로 1.주어진 배열두개를 정렬함 2.여벌이있는데 도난당한경우 해당 번호를 두 배열에서 제거함 (여벌도없고 잃어버리지도 않은 상태임) 이 두 로직을 추가하여 해결하였다. import Foundation func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int { var reserveList = reserve var..