전체 글
-
[Swift] KeyPath, WritableKeyPath, ReferenceWritableKeyPath 차이와 구분해서 사용하기Swift 2023. 10. 25. 17:55
GitHub - insub4067/KeyPath--WritableKeyPath--ReferenceWritableKeyPath Contribute to insub4067/KeyPath--WritableKeyPath--ReferenceWritableKeyPath development by creating an account on GitHub. github.com protocol SelfReturnable { associatedtype ReturnType func with(_ keyPath: WritableKeyPath, _ value: T) -> ReturnType } extension SelfReturnable { func with(_ keyPath: WritableKeyPath, _ value: T) -..
-
[Swift] NSPredicate format placeholdersSwift 2023. 10. 25. 16:59
format placeholders 정리에 대한 GPT 의 답변 In Objective-C, when creating an NSPredicate with a format string, you can use several different placeholders to represent values of different data types. Here are some common placeholders for format strings in NSPredicate: 1. %@: Used for representing object values, such as NSString, NSNumber, NSDate, and other NSObject-derived classes. 2. %K: Used for specif..
-
[Combine] AsyncPublisher 란?Swift 2023. 10. 24. 13:42
struct ContentView: View { @StateObject var viewModel = ContentViewModel() var body: some View { Button("Button") { viewModel.didTap() } } } class ContentViewModel: ObservableObject { @Published var items: [String] = [] private var store = Set() init() { observe() } func didTap() { items = ["1", "2", "3"] } func observe() { Task { for await value in $items.values { print("values: ", value) } } $..
-
[Swift] ThreadSafe 한 Class 만들기Swift 2023. 10. 24. 13:26
Actor | Apple Developer Documentation Common protocol to which all actors conform. developer.apple.com Sendable | Apple Developer Documentation A type whose values can safely be passed across concurrency domains by copying. developer.apple.com 동시에 여러 쓰레드에서 하나의 인스턴스에 접근하면 어떻게 될까? 아무 조치도 취하지 않는다면 값은 이미 변했지만 변하지 않은 값을 돌려받을 수도 있다. 그래서 thread safe 하게 race condition 을 피해주어야한다. 그럴때 사용되는 것이 Actor 와 Send..
-
[Swift] DispatchQueue.global() 과 Task.detatched(priority: .background) 의 차이점Swift 2023. 10. 24. 12:01
Task | Apple Developer Documentation A unit of asynchronous work. developer.apple.com DispatchQueue.global().async { // background work } // struct 이기 때문에 변수에 할당 가능 let task = Task.detatched(priority: .background) { try await doSomethingBadAss() } Task { // task.result 로 결과를 예외 처리 가능 switch await task.result { case .success(let result): break case .failure(let error): break } // failure 처리 안할꺼면 ..
-
[Swift] Mirror 써보기Swift 2023. 10. 18. 15:51
class User: NSObject { // setValue 는 NSObject 의 method @objc var login: String = "raw" // string -> key 로 접근 가능 } func hasProperty(_ name: String, object: AnyObject) -> Bool { let mirror = Mirror(reflecting: object) for (label, _) in mirror.children { if label == name { return true } } return false } var user = User() // login: "raw" let parameters: [String: Any] = ["login": "octodog"] for (key,..
-
2달 간 클린 아키택쳐를 적용해보고 느낀점카테고리 없음 2023. 10. 5. 02:20
객체지향을 적절하게 잘 적용하면 프로젝트 유지보수가 굉장히 편리해진다. 한 시니어께서 내가 말씀하셨다. “객체지향만 잘 지켜도 클린 아키택쳐까지 적용할 필요가 없다” 라고. 약 2달에 걸쳐 프로젝트에 클린 아키택쳐를 적용하고 나서 보니 이전보다 파일이 많이 생겼고 방대해 졌다. 코드의 재사용성이 좋아져 로직이 마치 레고 맞추듯 들어맞는건 참 좋다. UI 를 컴포넌트화 하듯 로직도 컴포넌트하는 것 같다. 하지만 적용하는데 공수가 많이들고 프로젝트가 비대해진다. 몇 가지 원칙만 잘세우고 객체지향을 잘 준수한다면 굳이 클린 아키택쳐 없이 충분히 좋은 프로젝트를 설계할 수 있을 것 같다. 하지만 만약 앱에서 지원하는 서비스가 다양해서 프로젝트가 크고 팀원이 많다면 클린 아키택쳐는 어쩌면 선택보다는 필수라는 생각..