분류 전체보기
-
[iOS/Swift] RxSwift subscribe flow야매 iOS 2023. 8. 7. 20:48
방출된 이벤트를 구독하는 일련의 과정 알아보기 사전 지식 ObservableConvertibleType public protocol ObservableConvertibleType { /// Type of elements in sequence. associatedtype Element /// Converts `self` to `Observable` sequence. /// /// - returns: Observable sequence that represents `self`. func asObservable() -> Observable } ObservableType public protocol ObservableType: ObservableConvertibleType { func subscribe(_ ob..
-
[iOS/Swift] RxGesture - Gesture가 동시에 인식되는 문제야매 iOS 2023. 8. 7. 20:14
문제 environment UIScrollView가 있고 subview로 UITextField를 가짐 UIScrollView에 rx.tapGesture를 사용해 TapGesture 적용 UIScrollView를 탭했을 때 키보드를 내리기 위해 problem UITextField를 터치했을 때 interaction이 어색함 해결 TL;DR scrollView.rx.tapGesture() // 수정 전 scrollView.rx.tapGesture(configuration: { _, config in // 수정 후 config.simultaneousRecognitionPolicy = .never }) config.simultaneoulsyRecognitionPolicy 프로퍼티에 .never를 넣어주면 됨 R..
-
[Swift] Dispatch야매 iOS 2023. 8. 7. 08:07
컴퓨터 동작방식 코드로 작성한 함수는 컴퓨터 명령어로 변형되어 메모리에 저장된다 함수를 호출한 다는 것은 컴퓨터가 해당 함수가 있는 메모리로 “점프”해서 명령어를 실행시키는 것을 의미한다 Static Dispatch (Compile Time) 컴퓨터가 코드를 컴파일할 때 함수의 코드가 어디에 있는지 명확하게 알고 있고 “점프”하는 것을 의미한다 함수의 위치를 “찾기” 위해 추가적인 연산이 필요없다 Dynamic Dispatch (Run Time) 컴퓨터가 어떤 추가적인 연산을 통해 함수의 위치를 찾아 해당 함수의 명령어를 실행한다 witeness table을 확인해서 어떤 함수를 실행해야 하는지 알 수 있다 2가지 종류가 있다 table dispatch message dispatch Table Dispa..
-
[Swift] Copy on Write야매 iOS 2023. 8. 7. 08:02
Swift에서 Reference Type이 아닌 Value Type에게만 해당된다 Value Type 중에서도 Collection만 해당됨 (Array, Set, Dictionary) Copy on Write를 사용하지 않으면 똑같은 데이터가 다른 메모리 주소를 가지기 때문에 비효율적이다 Value type의 크기가 크다면 할당하고 매개변수로 넘겨줄 때마다 복사하는 것은 매우 비싼 작업 발생 시점 변수에 값을 할당할 때 함수의 매개변수로 넘겨줄때 Copy on Write 어떤 변경사항이 생길 때 복사가 일어난다 주의사항 Copy on Write는 모든 Value Type의 기본 동작이 아니다 Swift Standard Library는 Collection Type에만 Copy on Write를 지원한다
-
[iOS/Swift] SwiftUI 계산기야매 iOS 2023. 8. 7. 07:57
ViewBuilder @ViewBuilder는 Result Builder로 다른 뷰를 조합해서 복잡한 레이아웃을 생성할 수 있는 커스텀 뷰를 구현할 때 사용한다. Apple A custom parameter attribute that constructs view from closures Result Builder ViewBuilder는 내부적으로 Result Builder로 구현되어 있다. 그러므로 Result Builder를 이해하면 ViewBuilder의 내부 동작에 대해 이해하는 것이 용이할 거라는 생각이 든다. Definition 표현식을 하나씩 거치면서 생성되는 값을 조합해서 새로운 값을 생성할 수 있게 한다. 즉 함수의 표현식의 결과를 모아서 전체 결과를 반환한다. Detail ******bu..
-
[iOS] Certificate & Provisioning야매 iOS 2023. 8. 7. 07:20
사전 지식 비대칭키 암호화 Public key로 암호화 하면 Private key로 복호화한다. iOS 개발에서 자주 사용하는 비대칭키 암호화 방식은 RSA ECDSA 암호화 해시 함수 메시지를 받아 해시 함수를 거치면 고정된 길이의 변환된 텍스트(digest)가 생성된다 one way function 암호화된 텍스트 복호화 안됨 original digest와 생성한 digest를 비교해서 변조됐는지 알 수 있다. 전자서명 전자서명을 통해 메시지가 믿을 만한 사람으로부터 생성되고 메시지가 변조되지 않았다는 것을 알 수 있다 → 문서 또는 메시지를 믿을 수 있는지 (믿을 만한 사람 & 내용 변조 ㄴ) 위에 두 기술을 사용해 전자 서명 생성할 수 있다. 전자 서명은 비대칭키 암호화와 다르게 private k..
-
[Swift] some & any야매 iOS 2023. 8. 7. 07:00
some은 Swift 5.1 그리고 any는 Swift 5.6에서 생성된 키워드 두 키워드는 protocol과 함께 주로 사용한다. 두 키워드의 탄생으로 인해 protocol can only be used as generic constraint because it has Self or associated type requirements 에러로부터 자유로워 졌다. some some 키워드는 무언가가 프로토콜을 준수한다는 것을 표현하는 opaque 타입을 생성한다. opaque type opaque 타입은 객체 또는 값이 어떤 프로토콜을 준수한다고 할 때 실제로 해당 객체 또는 값의 타입을 감춘다. protocol Person { let name: String { get } associatedType Job..
-
[Swift] Protocol Oriented Programming야매 iOS 2023. 8. 7. 06:53
OOP 클래스 상속을 사용해 해당 타입이 가진 공통적인 기능들을 모듈화해 구현 다중 스레드 환경에서 사용에 유의해야 한다 (race condition)이 발생할 수 있기 때문에 구조체/열겨헝은 클래스와 달리 상속이 불가하다. → 하지만 구조체/열거형과 같은 타입에 대해 공통적인 기능 구현을 위해서 다른 방법을 사용해야 한다. Protocol & Extension 프로토콜 : 특정 역할을 수행하기 위한 메서드, 프로퍼티 등 사항들을 한 데 모아놓은 청사진 익스텐션 : 기존 타입의 기능을 확장하도록 도와주는 기능 만일 특정 프로토콜을 정의하고 여러 타입에서 해당 프로토콜을 채택해 각 타입마다 똑같은 내용들을 구현해야 한다면 얼마나 많은 코드들이 중복되는가? 추후 이를 유지보수한다면 정의한 모든 데이터 타입의..