전체 글
-
PHCachingImageManager requestImage 이미지 중복 SWIFT TASK CONTINUATION MISUSEiOS 2023. 2. 7. 19:17
PHCachingImageManager.default().requestImage PHAsset 에서 이미지를 가져올 때 해당 메서드를 사용합니다. 무심코 아래와 같이 option 없이 사용할 수 있는데요 PHCachingImageManager.default().requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: nil) { image, info in if let image = image { continuation.resume(returning: image) } } 이럴 때 주의해야 할 점이 있습니다. 이 함수는 기본적으로 비동기적으로 동작합니다. 비동기적으로 사용했을 때 Photos..
-
[iOS] 이미지 권한 얻기iOS 2023. 2. 3. 10:35
iOS에서 사용자의 이미지를 가져오려면 권한이 필요합니다. Info.plist 에 아래 권한을 추가해주면 사용자의 사진에 접근하려고 할 때 권한을 요청합니다. (Privacy - Photo Library Additions Usage Description 이 아닙니다. =_= 혹 추가해도 안 되면 잘못 넣은 건 아닌지 확인해보시길..) 아래 방법으로 명시적으로 권한을 확인할 수도 있습니다. 한번 거부했다면 사용자가 설정에 들어가서 바꿔줘야 하므로 권한에 따라 추가 작업을 해줄 수 있습니다. PHPhotoLibrary.requestAuthorization(for: .readWrite) { [weak self] state in switch state { case .authorized: ... } } PH 코드..
-
task(priority:_:)SwiftUI 2023. 1. 28. 14:29
Adds an asynchronous task to perform before this view appears. 뷰가 나타나기 전에 비동기 작업을 추가한다. iOS 15 부터 지원하는 instance method 이다. 기존에는 비동기 작업을 하려면 아래와 같이 Task 를 사용해야했는데, ... var body: some View { aView { } .onAppear { Task { await load() } } } 아래와 같이 더 간편하게 사용할 수 있다. ... var body: some View { aView { } .task { await load() } }
-
StateObjectSwiftUI 2023. 1. 28. 14:01
ObservableObject를 인스턴스화 하는 프로퍼티 래퍼 SwiftUI 는 각 객체가 생성될 때 한 번만 새로운 객체를 생성하고, ObservableObject 의 @Published 프로퍼티가 바뀔 때 관련 뷰를 업데이트 합니다. 아래와 같이 사용할 수 있습니다. class Book: ObservableObject { @Published var title = "Great Expectations" } struct BookView: View { @StateObject var book: Book var body: some View { Text(book.title) } } state object를 ObservedObject attribute 를 갖는 프로퍼티로 넘길 수도 있지만, environmentOb..
-
ObservedObjectSwiftUI 2023. 1. 28. 13:31
A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes. ObservableObject 를 구독하고 ObservableObject 값이 바뀔 때마다 뷰를 무효화하고 새로 그리는 (invalidates a view) 객체 아래와 같이 사용할 수 있다. ObservableObject 객체를 @ObservedObject 프로퍼티 래퍼로 선언해두면, ObservableObject 의 @Published 값이 바뀔 때마다 뷰를 업데이트 한다. (새로 그린다.) class Book: ObservableObject { @Published var ti..
-
ObservableObjectSwiftUI 2023. 1. 28. 12:44
객체가 변경되기 전에 방출하는 퍼블리셔를 갖는 객체 타입 ObservableObject 는 objectWillChange 퍼블리셔와 동기화되어 있습니다. 이 objectWillChange 퍼블리셔는 @Published 프로퍼티가 변경되기 전에 값을 방출합니다. class Contact: ObservableObject { @Published var name: String @Published var age: Int init(name: String, age: Int) { self.name = name self.age = age } func haveBirthday() -> Int { age += 1 return age } } let john = Contact(name: "John Appleseed", age: ..
-
Swift Package 란Swift 2023. 1. 17. 15:45
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. 번들 소스파일, 바이너리, 리소스 등을 앱에서 사용하기 쉽게 번들로 제공합니다. Xcode 12부터 (swift-tool-version: 5.3 이상) Swift Package Manager 를 사용해 Swift Package 를 만들고 배포하고 추가, 제거 뿐 아니라 의존성 관리도 할 수 있습니다. 참고 https://developer.apple.com/documentation/xcode/swift-packages Apple Developer Documentation developer.apple.com Swift Package M..
-
[PackageDescription] 재사용 가능한 코드를 쉽고 편리하게 관리하자Swift 2023. 1. 17. 15:38
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. Swift Package 는 메인 디렉토리에 Package.swift 파일이 필수로 필요합니다. 이 파일 안에서 package manifest 의 PackageDescription 라이브러리를 사용해 의존성, 리소스, 여러 옵션을 관리할 수 있습니다. 예로 SlothCreator: Building DocC Documentation in Xcode 프로젝트의 package.swift 파일은 다음과 같이 생겼습니다. 안에 "SlotCreator" 라이브러리를 갖고 있는 패키지를 정의했고 타켓 정보들도 명시할 수 있습니다. import ..