Swift
-
[SwiftUI] Data 로 Lottie 보여주기Swift/SwiftUI 2023. 5. 18. 01:03
struct LottieView: UIViewRepresentable { let data: Data func updateUIView(_ uiView: UIViewType, context: Context) { } func makeUIView(context: Context) -> Lottie.CompatibleAnimationView { let animationView = CompatibleAnimationView(data: data) animationView.contentMode = .scaleAspectFit animationView.play() animationView.loopAnimationCount = .infinity return animationView } }
-
[Swift] Generic 을 사용해서 로그를 편하게 찍기Swift 2023. 5. 13. 14:20
import Foundation struct SomeAPI { static func post() { Network.request(caller: self) } } struct OtherAPI { static func post() { Network.request(caller: self) } } struct Network { static func request(caller: T.Type) { print(String(describing: caller)) } } SomeAPI.post() OtherAPI.post() // 출력 SomeAPI OtherAPI
-
[Swift] Class Type 검사하기 - isMember(of: )Swift 2023. 5. 12. 16:07
class SomeVC: UIViewController { } class OtherVC: UIViewController { } func validate(type: AnyClass) { let controllers = [SomeVC(), OtherVC()] for vc in controllers { print(vc.isMember(of: type)) } } validate(type: SomeVC.self) // 출력값 true false
-
TIL - 비동기에는 비용이 존재한다Swift 2023. 5. 6. 19:22
actor 과 Task 를 공부하면서 다양하게 반복문을 돌려보았다 내 예상에는 비동기가 퍼포먼스적으로 나을줄 알았는데 그렇지 않았다 결과적으로 actor 로 실행된 동기가 가장 빨랐다 아래는 2000번을 반복문 돌리는 동안 소요된 시간이다 Class 동기 1683348764.031726 1683348764.071846 -> 0.04012 Actor 비동기 1683348838.376186 1683348838.429184 -> 0.052998 Actor 동기 1683348994.649622 1683348994.650255 -> 0.000633 Class MainActor 비동기 1683348904.8285599 1683348904.853952 -> 0.0253921 Class MainActor 동기 1683..
-
[Swift] Actor #2 - @MainActor (class 와 같이 사용하기)Swift 2023. 5. 6. 11:57
🎶 인트로 그럼 실제 프로젝트에서는 어떻게 적용하면 좋을까요? ViewModel 등을 ObservableObject 를 상속해야하기에 class 로 만들어주어야합니다. 이때 등장하는 것이 MainActor 입니다. 코드는 아래와 같습니다. class 이지만 actor 채택하는 MainActor 를 따르고 있기 때문에 property 값을 참조할때 순서대로 실행이 됩니다. 💻 예시 코드 import Foundation @MainActor class Counter { var count = 0 func increase(times: Int) { for _ in 1...times { Task { count += 1 print(count) } } } } Task { let counter = await Counter..
-
[Swift] Actor (비동기 환경에서 Data Race 를 피해보자) - #1Swift 2023. 5. 6. 03:10
🤔 What and Why.. 회사에서 새로운 기능을 개발하면서 페이지 패칭과 로딩 스피너를 async/await 를 활용해서 구현했습니다. 빠르게 스크롤을 내리다보니 빠르게 페이지가 넘어가면 비동기적으로 패치가 불리게 되었고 그와중에 각종 변수의 값이 저의 예상과는 다르다는 것을 알게 되어서 공부의 필요성을 느끼게 되었습니다. 처음에는 NSLock, Semaphore 등을 공부해보려 했지만 Swift 의 최신 문법등과 잘 어울어질만한 Actor 을 공부하게 되었습니다. 🕴🏻 Actor? actor 는 class, enum, struct 과 같이 타입중 하나이며 참조 타입으로써 차이라면 동기적으로 상태에 접근한다는 것입니다. 이게 무슨 의미인지는 아래 코드에서 봅시다. 💻 Code 아래를 보시면 뭔가 기..