SWIFT
-
[Swift] TaskPriority, Task 우선순위 동작 이해하기Swift 2025. 3. 21. 10:40
TaskPriority 는 말 그대로 Task의 우선순위를 뜻합니다. 직관적이고 간단한 개념이지만 Task의 우선순위와 관련한 개념에 대해 조금 더 확실하게 알아보겠습니다. # 기본 개념TaskPriority는 스케줄링 힌트일 뿐, 반드시 이 우선순위에 따라서 실행된다는 보장은 없습니다.@available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)public struct TaskPriority : RawRepresentable, Sendable 케이스case high // 사용자 인터페이스 등 즉시 반응이 필요한 작업case userInitiated // 사용자가 명시적으로 시작한 작업, 빠르게 끝나야 함case medium // 일반적인 ..
-
[Swift] Sendable 이해하기Swift 2025. 2. 11. 20:29
Sendable은 data races의 위험 없는 thread-safe 한 타입임을 보장하는 protocol 입니다.Sendable을 따른다는 건, 동시성 걱정 없이 전달할 수 있다는 걸 의미합니다.따라서 actor의 메서드 파라미터로도 전달할 수 있습니다.Swift6 부터는 컴파일 단계에서 동시성이 필요한 경우 Sendable을 체크해서 검증한다고 합니다.예를 들어, Task를 만들 때 공유 데이터가 Sendable을 준수하지 않으면 컴파일 에러를 발생시킵니다. 아래 4가지는 안전하게 파라미터로 전달할 수 있습니다. 즉, Sendable 합니다.1. 값 타입 (Value types)struct나 enum은 내부 변수까지 모두 Sendable을 준수하는 값들로만 구성되어 있다면 Sendable 을 채택할..
-
[Swift] Actor 이해하기Swift 2025. 2. 11. 18:35
Actor란 Data race 문제를 방지하기 위해 도입된 Reference Type 입니다.내부 상태를 보호해서 data race를 방지하고,내부적으로 직렬 실행을 보장해서 동시에 여러 작업이 실행되지 않도록 합니다.class와 마찬가지로 참조 타입이지만 상속은 지원하지 않습니다. Actor가 유용한 대표적인 예시를 하나 살펴보겠습니다.바로 은행 시스템입니다. 은행 계좌에서 안정성이 왜 중요한지는 굳이 설명하지 않아도 되겠죠 ?actor BankAccount { let accountNumber: Int var balance: Double init(accountNumber: Int, initialDeposit: Double) { self.accountNumber = accou..
-
[MTL] MTLTextureiOS/Metal 2024. 8. 20. 19:38
A resource that holds formatted image data. 'GPU에서 처리할 수 있도록 정제된 이미지 정보를 갖고 있는 자원'을 추상화시켜 놓은 객체입니다. 이 프로토콜을 직접 구현하지 말고 주어진 instance 생성 메서드들을 이용해서 생성해야 합니다 !Don’t implement this protocol yourself; instead, use one of the following methods to create a MTLTexture instance 1. MTLTextureDescriptor 이용하기descriptor to textureMTLTextureDescriptor를 만들고 MTLDevice의 makeTexture(descriptor:) 를 사용해 texture를 생성..
-
SwiftLint SPM으로 설치하기 (using Swift Package Build Tool Plugin)iOS 2024. 3. 22. 14:38
새 프로젝트에 lint를 적용해 보려고 하니, 기존에 cocoapods나 brew에 관련된 설명만 있고 spm만으로 설치하는 것에 대한 내용이 잘 없어서 적어본다. 설치 방법이 다양하듯이 lint를 실제로 사용하는 방법도 몇 가지 있는 것 같은데, 이것저것 설치하기가 싫어서 Swift Package Build Tool Plugins 로 설치했다. Swift Package Build Tool Plugins 3줄 요약 1. Target 'None' 으로 패키지 추가. 2. SwiftLintPlugIn 추가. (using Swift Package Build Tool Plugins) # 1. Add Package 먼저 SPM으로 패키지를 추가한다. 정석 방법 대로. 단! 이때 Target은 None으로 설정해줘..
-
Identifiable 프로토콜 기본개념Swift 2023. 7. 31. 14:32
protocol Identifiable > ID: Hasable 안정적인 id 값을 갖는 인스턴스 객체 특정 기간이나 범위 안에서 유니크함을 보장함. 아래 특성들을 가질 수 있음. - 항상 유니크함. 예를 들어, UUID - 특정 환경안에서 유니크함. 예를 들어, 데이터베이스 record 키들 - 프로세스 생애주기 동안 유니크함. 예를 들어, static 변수 - 객체의 생애주기 동안 유니크함. 예를 들어, object identifiers - 현재 집합 안에서 유니크함. 예를 들어, collection indices Identifiable Protocol 을 채택하면 class 타입은 ObjectIdentifier 를 기본 값으로 제공해줌. 하지만 이는 객체의 생애주기 동안만 유효. 더 강력한 ide..
-
UISlider 커스텀하기 - 1iOS 2023. 4. 12. 14:01
UISlider 만들어진 그대로 사용하긴 쉽지만 커스텀하기 시작하면 생각보다 쉽지 않네요.. 간단할 것 같지만 생각보단? 좀 찾아봐야 하는 것들 위주로 정리하려고 합니다. 이번 글은 1탄으로 thumb 를 교체 하는 방법입니다. 1. thumb 교체하기 교체하는 것 자체는 생각보다 간단하게 할 수 있습니다. setThumbImage 를 사용해주면 됩니다. class WSSlider: UISlider { required init?(coder: NSCoder) { super.init(coder: coder) self.setupThumb() } private func setupThumb() { let thumbImage: UIImage = ... self.setThumbImage(thumbImage, for:..
-
UIScrollView image zoom 구현하기iOS 2023. 2. 15. 12:27
UIScrollView 관련해서 찾아보면 거의 가로, 세로로 스크롤 하는 방식들이 많이 나옵니다. 근데 의외로 줌 하는 방법들은 많지 않더군요.. 그래서 정리해봅니다! 사실 여러 방법들이 있는데 저는 ScrollView 에 새로 추가된 Content Layout Guide, Frame Layout Guide 등을 써서 하고싶어서 한참 삽질을 했던 것 같아요.. 결론부터 말씀드리면 zoom 을 위해선 이 layout guide를 따로 쓸 필요가 없다! 이렇게 받아들이고 나면 방법도 아주 간단합니다. 1. 스크롤뷰 추가 2. 서브뷰 추가 3. 서브뷰의 top, leading trailing, bottom 레이아웃을 스크롤 뷰에 맞춰준다. (content, frame layout 이 아님!) 4. scroll..