Swift
-
네이버 지도 이용시 멀티스레딩Swift 2023. 9. 24. 23:25
DispatchQueue.global(qos: .default).async { // 백그라운드 스레드 var markers = [NMFMarker]() for index in 1...1000 { let marker = NMFMarker(position: ...) marker.iconImage = ... marker.captionText = ... markers.append(marker) } DispatchQueue.main.async { [weak self] in // 메인 스레드 for marker in markers { marker.mapView = self?.mapView } } } 오버레이의 속성은 스레드 안전성이 보장되지 않으므로 여러 스레드에서 동시에 접근해서는 안됩니다. 특히 지도에 추가된 ..
-
의존성 주입Swift 2023. 9. 24. 15:22
의존성 주입(Dependency Injection) 객체의 생성과 사용 관심사를 분리하는 프로그래밍 설계 방식입니다. 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻하며, 일반적으로 우리가 사용하는 의존성 주입은 클래스에 대한 의존성의 인터페이스화를 통한 코드 유연성 증대 + 클래스간 의존성을 외부에서 주입하는 것을 뜻합니다. public class Dependency { public func doSomething() { print("Dependency doing something") } } public class MyClass { public func doSomething() { let dependency = Dependency() dependency.doSomething() } } MyClass는..
-
scene, AppDelegate (iOS13 이후 도입)Swift/UIKit 2023. 9. 17. 17:49
scene 객체는 iOS 앱의 사용자 인터페이스 및 콘텐츠를 표시하는 데 사용되는 독립적인 화면. 각각의 scene은 앱이 실행 중에 생성되고 관리될 수 있는 독립적인 인스턴스 iOS 13부터 UIScene 프레임워크가 도입되었으며, 이를 통해 멀티태스킹과 다중 창 지원 등의 기능을 구현할 수 있게 되었습니다. 이전에는 하나의 UIWindow만 있어서 한 번에 하나의 화면만 보여줄 수 있었지만, UIScene을 사용하면 여러 개의 UIWindow와 해당하는 scene들을 생성하여 복수 개의 화면을 관리할 수 있습니다. Scene 객체 멀티태스킹: 각각의 scene은 앱이 백그라운드에서 실행 중일 때도 동작하고, 복수 개의 scene이 함께 실행될 수 있습니다. 예를 들어, 메시지 앱에서 새로운 메시지가 ..
-
코디네이터 패턴 (feat. 진입점: SceneDelegate에서 관리)Swift 2023. 9. 17. 17:38
스위프트에서 코디네이터(Coordinator)는 앱의 네비게이션 흐름을 관리하고, 뷰 컨트롤러 간의 전환을 조정하는 디자인 패턴입니다. 코디네이터는 MVC(Model-View-Controller) 아키텍처를 보완하고, 뷰 컨트롤러의 역할을 단순화시켜 응용 프로그램의 유지보수성과 테스트 용이성을 향상시킵니다. 코디네이터 패턴은 일반적으로 앱 내에서 여러 화면 간의 전환과 네비게이션 로직을 처리하는데 사용됩니다. 주요 목적: 뷰 컨트롤러가 다른 뷰 컨트롤러로 직접적인 전환을 처리하지 않도록 분리하는 것 이렇게 하면 각각의 뷰 컨트롤러는 자신에게 주어진 역할에만 집중, 코드 재사용성과 유연성도 향상됨 코디네이터 패턴 작동 구조: 1. 코디네이터 클래스 생성: `Coordinator`라는 이름의 클래스를 만듭니..
-
swift 클로저 - 캡처리스트 (:클래스에서의 사용)Swift/swift 문법 2023. 9. 6. 00:01
클로저는 참조타입이다. 클로저 내부에서 외부의 값을 불러올 때 '캡쳐현상'이 발생한다. 이떄 클로저 안에서 이용되는 외부의 변수를 캡쳐리스트 안에 넣어줄 수 있다. 캡쳐 리스트를 써서 대상을 캡쳐할 수 있는데, 캡쳐한 대상의 타입에 따라 그 방법이 달라진다. 캡처된 대상 캡쳐리스트 유무 결과 구조체 캡처리스트를 쓰지 않은경우 외부 값이 변하면 같이 변한다 캡처리스트를 쓴 경우 외부 값이 변해도 변하지 않음 값 캡처리스트를 쓰지 않은경우 주소값 복사 캡처리스트를 쓴 경우 주소값 복사 (RC를 올려서 메모리에서 해제될 가능성을 방지) 이중 값 타입의 코드 예시 // 클래스의 캡처리스트 class SomeClass { var num = 1 deinit{ print("메모리에서 해제되었습니다.") } } var..
-
differences between @Binding and @ObservedObjectSwift/SwiftUI 2023. 8. 24. 00:34
In this example, we'll create a simple app with a counter. Tapping a button in the child view will increment the counter, and the updated counter value will be shown in both the parent and child views. import SwiftUI struct ContentView: View { @State private var counter: Int = 0 var body: some View { VStack { Text("Counter in Parent: \(counter)") ChildView(counter: $counter) } } } struct ChildVi..