ARFaceTrackingConfiguration()
·
SWIFT개발일지/ARkit
1. 먼저 기기에서 지원을 확인을 하는지 Appdelgate에서 확인을 한다. if !ARFaceTrackingConfiguration.isSupported { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) { let alert = UIAlertController(title: "Unsupported Device", message: "This app requires TrueDepth Camera with iOS 11.0+", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Close", style: .default) { action in exit(0) }) self.window?.ro..
Combine3-Cancellable
·
iOS/반응형프로그래밍
Combine을 공부하다보면 Cancellable이라는 프로토콜을 자주 만나게 된다. 먼지도 모르고 그냥 쓰는 것은 내가 제일 싫어하는 것이기에 공부 바로 시작Cancellable"A protocol indicating that an activity or action supports cancellation."취소를 지원하는 활동 혹은 액션을 나타내는 프로토콜..? 이거 보고 이해하는 사람 있나여? 일단 나는 아님Combine에선 이벤트 스트림을 action이라하는데 이 것을 취소할수 있는 프로토콜이라고 한다.public protocol Cancellable { func cancel()}실제로는 구독의 라이프사이을 관리하는 매커니즘을 제공합니다.구독을 취소하면?:- 퍼블리셔는 더 이상 값을 생성하지 ..
Combine(1)-WhatisCombine(publish&subscirbe)
·
iOS/반응형프로그래밍
Combine이 뭐길래?iOS 13에서 Apple이 선보인 Combine 프레임워크를 처음 접했을 때, "아, 그냥 비동기 처리 도구구나" 하고 넘어가려던 제가 있었습니다. 하지만 실제로 써보니 완전히 다른 이야기더라고요 😅Combine의 진짜 목적은 비동기 처리가 아닙니다.반응형 프로그래밍이라는 패러다임을 통해 데이터 흐름과 변화의 전파에 중점을 둔 선언적 API를 제공하는 게 핵심이에요. 왜냐하면 기존의 명령형 코드보다 가독성과 유지보수성을 극대화할 수 있기 때문입니다.그럼 왜 하필 Apple이 RxSwift가 이미 자리잡고 있는데 Combine을 만들었을까요?RxSwift는 서드파티 라이브러리라서 별도의 프로젝트 설정이 필요하고, 의존성 관리도 해야 했어요. 반면 Combine은 퍼스트파티 프레임..
디스패치 그룹
·
iOS
iOS 개발에서 비동기 작업을 그룹화하고 실행을 제어하는 방법은 매우 중요하다. 여러 개의 비동기 작업이 동시에 실행될 때 작업이 언제 끝나는지 감지하고 후속 작업을 실행해야 하는 경우가 많다. 이때 DispatchGroup과 DispatchSemaphore가 유용하게 쓰인다.1. DispatchGroup(1) DispatchGroup이란?DispatchGroup을 사용하면 여러 개의 비동기 작업을 그룹화하여 해당 그룹의 모든 작업이 끝났을 때 특정 코드를 실행할 수 있다.이것을 활용하면 예를 들어 런치스크린 이후 첫 화면을 로딩할 때, 모든 필수 리소스(이미지, 데이터)를 다 받은 후 UI를 업데이트할 수 있다그룹1의 작업이 여러쓰레드에서 작업을 해도 묶여있고 마지막 task가 끝나는 시점을 알 수 있..
GCD queue.
·
iOS
왜 멀티스레딩이 필요한가?아이폰에는 여러 개의 스레드가 존재합니다. 그런데 왜 앱이 버벅일까요? 🤔간단한 비유로 설명해보겠습니다. 회사에 일꾼이 여러 명 있는데, 한 사람에게만 "야 너 다해!"라고 모든 일을 맡기면 어떻게 될까요?당연히 그 사람은 "아... 할 게 너무 많아..."하며 과부하가 걸리겠죠.iOS에서도 마찬가지입니다. 특히 메인 스레드는 UI 업데이트와 사용자 이벤트 처리라는 핵심 업무를 담당하는데,여기에 무거운 작업까지 몰아주면 앱이 버벅이게 됩니다.저도 처음에는 "스레드가 여러 개면 괜찮지 않나?"라고 생각했는데, 실제로는 작업을 어떻게 분산하느냐가 핵심이더라고요 💡해결책은 간단합니다: 다른 스레드로 작업을 분산하면 됩니다!iOS에서는 직접 스레드를 관리할 필요가 없습니다. 단지 작..
Actor🕴🏻
·
iOS
- What is Data Race?두 스레드가 동기화 없이 동일한 객체에 접근하려 할때 ⇒ Data race이벤트 순서가 프로그램의 정확성에 영향을 미칠때 ⇒ Race Conditionex) Thread별 연산의 실행 순서에 따라 값이 달라질 수 있다! 고로 Data Race≠Race conditionclass MyDataManager { static let instance = MyDataManager() private init() {} var data: [String] = [] func getRandomData() -> String? { self.data.append(UUID().uuidString) print(Thread.current) r..
파괴되지 않은 건물 - pYthon
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ?? 왤캐 쉬워? 하면서 풀었던 문제 1트 타입이1이라면 데미지니까 보드에서 디그리만큼 빼주고 아닐경우는 더해주고 보드를 전체적으로 돌아보면서 0보다 크다면 남아있는벽이므로 answer+=1해주었다. 그랫더니 결과는? 두구두구두구... def solution(board, skill): answer = 0 for type,r1,c1,r2,c2,degree in skill: if type == 1: ..
양궁대회- 22KAKAO Blind(python)
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. n의 제한이 10이기에 일단 나는 중복조합을 사용해도 된다고 생각을 하였다. 2. info를 보면 점수가 첫번째인덱스가 10이고 줄어드는 형식으로 되어있기에 temprion에도 만약 내가 맞춘 점수에 해당하는 인덱스에 1이 증가하도록 하였다. 그리고 나서 해당하는 temprion과 info를 비교하면서 만약 temprion이 크다면 라이언이 해당하는 점수를 얻고 아닌데 만약 Info[k]에만..
주차요금계산 - 22kakao blind recruitment - python
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제해석 fees에 순서대로기본시간, 기본요금, 추가시간당, 추가요금으로 나오고 records에는 몇시에 어떤차가 들어오거나 나갔는지의 기록이 있다. 먼저 레코드들의 정보를 쪼개서 cardict에 key값으로는 차번호가 value에는 시간과 in,out상태를 넣어주었다. 첫번째 for문을 다 돌게 되면 키값에 해당하는 모든 history가 value로 이차배열이 들어가게 된다. 그 후 문제에서 보..