Software

    [Swift] 외부 라이브러리 가져다 쓰는 방법 3가지

    [Swift] 외부 라이브러리 가져다 쓰는 방법 3가지

    SPM ( Swift Package Manager ) : 가장 쉬움 Cocoa Pod Carthage

    [Swift] @escaping Closure

    [Swift] @escaping Closure

    시작하기전에 클로져 func add(_ i : Int, _ j : Int, _ handler: (Int) -> Void){ let sum = i + j handler(sum) } add(3,4 {(result : Int) -> Void in print("3 + 4 = \(result)") }) 자세한 이야기 함수의 파라미터로 클로져가 전달될 때 escaping 또는noescaping closure가 사용됩니다. 클로저가 함수로부터 Escape한다는 것은 해당 함수의 인자로 클로저가 전달되지만, 함수가 반환된 후 실행 되는 것을 의미합니다.수의 인자가 함수의 영역을 탈출하여 함수 밖에서 사용할 수 있는 개념은 기존에 우리가 알고 있던 변수의 scope 개념을 무시합니다. 왜냐하면 함수에서 선언된 로컬 변수..

    [Swift] Instance Method 와 Type Method

    [Swift] Instance Method 와 Type Method

    스위프트의 메소드 Swift에서 구조체와 열거형에서 메소드를 정의할수 있다는 사실은, C와 Objective-C와는 가장큰 차이점입니다. Objective-C에서, 클래스는 메소드를 정의할수 있는 유일한 타입입니다. Swift에서는, 클래스, 구조체, 열거형에서 선택할수 있고, 생성한 타입에 대한 메소드 정의를 유연하게 할 수 있습니다. 인스턴스 메소드 - Instance Method 인스턴스 메소드(instance methods)는 특정 클래스, 구조체, 열거형의 인스턴스에서 속해있는 함수. class Counter { var count = 0 func increment() { count += 1 } func increment(by amount: Int) { count += amount } func r..

    [iOS] URLSession Alamofire

    [iOS] URLSession Alamofire

    Alamofire는 HTTP 네트워킹을 하는데 자주 사용하게 되는 코드나 함수를 더 쉽게 사용할 수 있도록 모아놓은 라이브러리 Alamore란 iOS, macOS를 위한 Swift 기반의 HTTP 네트워킹 라이브러리 Alamofire는 URLSession 기반이며 URLSession은 네트워킹 호출에서 모호한 부분이 많은데 Alamofire를 사용한다면 데이터를 접근하기 위한 노력을 줄일 수 있으며 코드를 더 깔끔하고 가독성 있게 쓰는 것이 가능해짐 URLSession iOS에서 기본적으로 제공하고 있는 HTTP통신 방법은 여러가지가 있지만 URLSession을 이용한 방법이 대표적. URLSession은 URLSessionConfiguration을 이용하여 생성을 하게 된다. URLSession 여러개..

    [Swift] GCD Dispatch Queue

    [Swift] GCD Dispatch Queue

    Main Queue : 시스템이 생성해주는거 사용 사용자 UI update 관련 인터렉션 처리 async만 사용가능. Global Queue : 시스템이 생성해주는거 사용 QoS (Quality or Service): 글로벌 큐에서 사용될 우선순위를 정해주는 인자 (우선순위가 높은순) 1. userInteractive : 바로쓰는 대화에 작업에 사용 2. userInitiated 3. default 4. utility : 수초~ 수분에 걸리는 사용 (네트워크 파일 등) 5. background : 사용자들과 당장 인터렉션이 필요가 없는 경우 (뉴스, 위치, 영상 다운 등등) Custom Queue : 사용자 직접 생성 직접 큐를 생성해서 쓰는 경우 let concurrentQueue = DispatchQ..

    [ios] 비동기 (Async) vs 동기 (Sync) 와 직렬 vs 동시처리

    [ios] 비동기 (Async) vs 동기 (Sync) 와 직렬 vs 동시처리

    다른 하나의 스레드로만 보내는 것이 직렬처리 여러 개의 스레드로 분산 처리 하는 것이 동시 개념 순서가 중요할 때, 주로 직렬 처리를 사용한다. 완전히 다른말이다. 비동기 라는 말은 작업이 보내는 쓰레드에 관련된 말이다. 메인 스레드에서 다른 스레드로 보낸 작업을 기다릴지 말지에 관한 내용이 동기 , 비동기에 관한 내용이고, 메인스레드에서 다른 스레드로 작업을 보낼 때, 스레드가 한개냐 여러개냐?를 뜻하는것이 직렬 동시처리 이다.

    [Swift] Equatable , Codable 프로토콜

    [Swift] Equatable , Codable 프로토콜

    Equatable struct Todo: Codable, Equatable { let id: Int var isDone: Bool var detail: String var isToday: Bool mutating func update(isDone: Bool, detail: String, isToday: Bool) { // [x] TODO: update 로직 추가 self.isDone = isDone self.detail = detail self.isToday = isToday } // '=='이라는 조건을 정의 해주는 것.Equatable이라는 프로토콜을 넣어주면 우리 맘대로 정의 가능. static func == (lhs: Self, rhs: Self) -> Bool { // [x] TODO: 동등 조..

    [Swift]  mutating 구조체

    [Swift] mutating 구조체

    Mutating 구조제에 선언된 프로퍼티를 변경하기 위해서는 함수앞에 mutating이라는 말을 써주어야한다. 그래야 값을 변경하는지 아닌지 알수 있음 struct Todo: Codable, Equatable { let id: Int var isDone: Bool var detail: String var isToday: Bool mutating func update(isDone: Bool, detail: String, isToday: Bool) { // [x] TODO: update 로직 추가 self.isDone = isDone self.detail = detail self.isToday = isToday } // '=='이라는 조건을 정의 해주는 것.Equatable이라는 프로토콜을 넣어주면 우리 맘..

    [Xcode] 데이터 저장방법

    [Xcode] 데이터 저장방법

    데이터가 적은 경우 NSCoding Property List 데이터가 많은 경우 Core Data(구현난이도 있음) Realm Serialization 등등등... Codable NSCoding 처럼 데이터가 적은 경우 구현하기에 적합하며, swift4이상부터 지원하기 시작. 현재는 거의 필수로 사용중. 아주 쉽게 데이터를 다룰 수 있게 해주는 프로토콜.

    [Xcode] Project editor - 프로젝트 편집기

    [Xcode] Project editor - 프로젝트 편집기

    프로젝트 편집기의 첫 번째 열에있는 프로젝트 제목 아래에는 Project와 Targets제목이 표시된다. Project는 생성하는 모든 프로젝트는 해당 특정 프로젝트의 모든 대상에 대한 기본 빌드 설정을 정의한다. Target은 빌드하는 앱이며, xcode가 프로젝트나 작업 공간에서 파일들 안에서 제품을 구축하는 데 필요한 정보를 포함한다. Gerneral : ID, 서명 및 배포 옵션과 같이 가장 일반적으로 수정된 대상 설정을 조정 Singing & Capabilities : 앱에 승인, 앱 서비스를 활성화. 앱에 서명하려면 Xcode 프로젝트의 각 대상을 동일한 팀에 할당해야 한다. 개인으로 등록하면 1인 팀으로 간주됨. 만약 당신이 Apple Developer Program의 회원이 아니라면, Xc..