-
COW(Copy-on-Write) 를 알아보자iOS/🟠 Swift 2022. 12. 29. 23:34
Copy-on-Write 값을 실제로 쓸 때 (on-write) 복사한다(copy) 실제 복사를 늦추어 힙 할당을 줄이는 최적화 방법 Usecases 1. Swift Collection : Array, Dictionary, String 등 2. 3-word 가 넘는 struct 를 Protocol 타입으로 다룰 때 값 타입과 힙 영역의 관계 Array 나 String 은 스위프트에서 값 타입 입니다. 값 타입 인스턴스는 기본적으로 스택 영역을 할당하고 그 곳에 값을 초기화하는 것으로 알려져 있습니다. 그러면 값 타입과 힙 영역은 어떤 관련이 있을까요? Arrray, String 등 Collection 을 활용하는 특정 값 타입들은 런타임에 element 의 추가, 삭제가 가능하기 때문에힙 영역 데이터를 ..
-
[Swift] Swift 5.8 CHANGELOGiOS/🟠 Swift 2022. 11. 27. 02:28
SE-0365 이제 클로저 내부에서 [weak self] 로 캡처한 self 를 언래핑한 이후에는 self 를 생략해도 됩니다. class ViewController { let button: Button func setup() { button.tapHandler = { [weak self] in guard let self else { return } dismiss() // refers to `self.dismiss()` } } func dismiss() { ... } } Swift 5 에서는 non-escaping 클로저에서 [weak self] 이후 self 를 명시적으로 언급하지 않아도 되었지만, Swift 6 버전부터는 더 이상 허용되지 않습니다. self 를 언래핑하거나, [unowned self..
-
[UIKit] .xib 사용하기iOS/🛠 이슈와 궁금증 2022. 5. 30. 22:05
안녕하세요 🥷🏻 이번 시간에는 xib 사용법을 정리하려고 합니다. 예시가 되는 상황은 다음과 같습니다. 붉은 색 사각형의 UIView 와 "RED" 라는 UILabel 을 서브뷰로 가지는 UIView 를 재사용하기 위해 RedView.xib 와 RedView.swift 파일을 만들었습니다. 이 xib 를 다른 곳에서 사용하고 싶다면? 크게 두가지 방법이 있습니다. 1. xib 파일의 File's Owner 에 커스텀 클래스를 등록하여 사용하기 2. xib 파일의 뷰에 커스텀 클래스 를 등록하여 사용하기 방법 1. File's Owner 에 커스텀 클래스를 등록하여 사용하기 1. xib 파일의 File's Owner 에 커스텀 클래스를 등록합니다. 2. xib 를 사용할 스토리보드에 UIView 를 원하는..
-
[WWDC 20] Embrace Swift Type InferenceiOS/👨🏻💻 WWDC 와 테크세미나 2022. 5. 23. 01:01
안녕하세요 🥷🏻 이번 시간에는 WWDC 20: Embrace Swift Type Inference 영상을 요약해보았습니다. 그럼 시작해볼게요! 영상의 구성 - Leveraging type inference - How type inference works in compiler - Using Swift and Xcode to fix compiler errors Leveraging type inference 타입 추론을 사용하면 중복되거나 덜 중요한 정보(verbose, incidental) 를 코드에 담지 않을 수 있게 됩니다. 따라서 코드가 깔끔해지고, 생산성이 증가합니다. let text = "" 위의 타입 추론 예시는 아주 간단합니다. "" 라는 String literal 을 통해 컴파일러는 text ..
-
[WWDC 21] ARC in Swift: Basics and beyondiOS/👨🏻💻 WWDC 와 테크세미나 2022. 5. 15. 17:35
요약 👀 ARC 는 오브젝트(인스턴스)의 life time이 끝날 때 deallocate 해준다. 그렇다면 ARC 는 오브젝트의 life time 이 끝난지 어떻게 알수 있는 것일까? Referecne count 를 추적한다. ARC 최적화에 의하여, observed obejct life time 과 guaranteed mininum object life time 이 다를 수 있다. Observed object life time 은 미래에 스위프트 컴파일러 구현에 따라 변동 될 수 있으니, 이것에 의존하는 코드는 잠재적 버그를 포함한 것이므로 가능한 수정해야한다. 키워드 중심 정리 💎 object life time 스위프트에서 object life time 은 사용 기반 ( use-based ) 이다. ..
-
[SOLID] 의존관계 역전 원칙이란?General/🟢 General 2022. 2. 17. 23:46
Dependency inversion principle 고수준의 모듈이 저수준의 모듈에 직접 의존하지 않고, 인터페이스에 의존한다. 저수준의 모듈도 이 인터페이스를 의존한다. 저수준의 입장에서 의존 받는 입장에서 의존 하는 입장으로 관계가 역전된다. 처음보면 이해가 잘 가지 않습니다. 아래 설명을 한번 볼까요? High Level Module 과 Low Level Module 보통 더 많은 정보를 가지고 있으면 하이레벨 ( 동물원 ) 상대적으로 적은 정보를 가지고 있으면 로우레벨이라고 설명합니다. (동물들) 정리하자면 동물원은 펭귄, 사자, 코끼리에 의존하고 있습니다. 이것이 보통은 자연스러운 관계입니다. 하지만 ... 프로그래밍 세계에서는... 양이나 소, 토끼 등 동물들이 계속 추가되면 동물원은 더 ..
-
[Swift] if case let 를 사용하여 불필요한 코드 줄이기iOS/🟠 Swift 2022. 1. 16. 21:53
안녕하세요🐶 이번 시간에는 if case let 패턴을 사용해 switch-case 구문의 boiler plate 를 줄여보도록 하겠습니다. 언제 쓰는가? 열거형을 처리할 때 보통 저는 switch-case 를 사용했었습니다. 단일 case 만을 처리하고 싶어도 같은 방법을 사용했습니다. 떡볶이 열거형을 예로 한 번 들어보자면: enum 떡볶이 { case 일반 case 치즈 } let 내떡볶이 = 떡볶이.치즈 switch 내떡볶이 { case .치즈: 치즈토핑얹기() case .일반: break; } 만약 더 많은 케이스가 있는데 하나만 처리하고 싶은 경우라면, default 문을 사용할 수도 있습니다. switch 내떡볶이 { case .치즈: 치즈토핑얹기() default: break } 이렇게 단..
-
Could not find module 'Kingfisher' for target 'x86_64-apple-ios-simulator' 해결iOS/🛠 이슈와 궁금증 2021. 12. 27. 11:38
메시지 간단 해석 x86_64 시뮬레이터 용 Kingfisher 모듈을 못찾겠다. 대신 arm64 와 arm64 시뮬레이터 용 모듈은 찾았다. 에러가 발생한 상황 인텔 1명, M1 2명으로 진행중인 협업 프로젝트 저는 develop 브랜치에서 끌어와서 M1 으로 최초 빌드한 상황 왜 이 부분이 혼란스러운지? 나는 M1 맥북 프로를 사용하고 있다 (ARM 기반 맥) 시뮬레이터는 arm64 로 돌아갈 것이다 x86_64 시뮬레이터를 사용하고 있지 않다! Open using Rosseta 옵션으로 실행시키지 않음 발견한 원인은? 인텔 팀원이 타겟의 build settings 에서 Excluded Architecture 에서 arm64 로 설정해 놓았다. 아마 팀원이 반대의 경우 (M1 프로젝트를 인텔에서 빌드..
-
[RxSwift] ObservablesiOS/🔁 RxSwift ⁄ Combine 2021. 12. 20. 09:50
참고자료 KxCoding rayWendelich 목표 Observable 의 특징은? Observable 을 만드는 두 가지 방법을 이해한다 Observable 을 사용하는 방법을 이해한다 옵저버블이 뭔가요? Rx 의 심장 💗 Rx 에서 모든 것은: 시퀀스 이거나 시퀀스와 함께 동작하는 것들 Observable, Observable sequence, Sequence 는 모두 옵저버블을 가리키는 말 시퀀스인데 비동기 시퀀스이다. 시퀀스는 일정 기간 (유한 ~ 무한) 동안 이벤트를 생산한다. 이것을 이벤트를 방출한다고 표현한다. 옵저버블은 옵저버가 구독한다. 이벤트의 방출은 특히 마블 다이어그램으로 이해하면 편하다: 시간은 왼쪽으로 오른쪽으로 흐른다 ⏰ 마블 간 간격이 특정한 시간의 크기를 나타내는 것은 아..