[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기
반응형

분류 전체보기 495

[Combine] timer (by Runloop, Timer Class, DispatchQueue)

Combine을 통해 Timer를 생성하고 관리해보자. Runloop 입력소스 및 타이머 이벤트를 전달받는 인터페이스인 Runloop를 활용하여 Timer cacellable 객체를 생성할 수 있다. Runloop 공식문서에서 cacellable 객체를 생성하는 메서드를 확인할 수 있다. (마지막 schedule 메서드) Example let runLoop = RunLoop.main let subscription = runLoop.schedule(after: runLoop.now, interval: .seconds(2) , tolerance: .milliseconds(100)) { print("Timer fired") } runLoop.schedule(after: .init(Date(timeInterva..

[Combine] Operator (4): Sequence Operator

Sequence Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 배열로 이루어진 Output을 변환하는 Operator(Sequence Operator)를 정리해보겠다. min and max Example let publisher = [1,-45,3,45,100].publisher publisher .max() .sink { print($0) } Output 100 publisher가 finish될 때까지 기다리고 이 후 연산을 처리한다. 데이터 중 max(min)값을 반환한다. first and last Example let pu..

[Combine] Operator (3): Combining Operator

Combining Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 데이터를 추가 혹은 합성하는 Operator(Combining Operator)를 정리해볼까 한다. prepend Example let numbers = (1...5).publisher let publisher2 = (500...510).publisher numbers.prepend(100,101) .prepend(-1,-2) .prepend([45,67]) .prepend(publisher2) .sink { print($0) }Output 500 501 502 50..

[Combine] Operator (2): Filtering Operator

Filtering Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 데이터를 필터링해주는 Operator(Filtering Operator)를 정리해보자. filter Example let numbers = (1...20).publisher numbers.filter { $0 % 2 == 0 } .sink { print($0) }Output 2 4 6 8 10 12 14 16 18 20 조건에 통과하는 데이터들만 반환한다. removeDuplicates Example let words = "apple apple apple fruit ..

[Combine] Operator (1): Transforming Operator

Transforming Operator Combine에서 Operator는 Publisher를 가공해 다른 형태나 구성으로 변경해주는 역할을 한다. Upstream으로부터 전달받은 데이터를 가공하여 downstream으로 전달하는 것이다. 그 중 데이터의 형태(타입)를 바꿔주는 Operator(Transforming Operator) 정리해볼 것이다. collect Example ["A","B","C","D","E"].publisher.collect(3).sink { print($0) } Output ["A", "B", "C"] ["D", "E"] Input 데이터를 모아서 Array로 한번에 반환하도록 처리한다. 파라미터로 숫자를 넣어서 몇개를 하나로 묶을지도 결정할 수 있다. (default는 모든 ..

[CoreData] 기초개념 (3): Entity Relationship

Entity Relationship 해당 버튼을 누르면 Entity를 관계그래프 형태로 확인할 수 있다. 이 때 표현된 Entity 둘을 마우스를 통해 드래그를 하여 이어주면 Relationship을 설정할 수 있다. Relationship이 설정된 모습이다. 각 Entity에게 Relationship은 서로를 의미하게 된다. 데이터베이스 모델처럼 관계 타입도 설정할 수 있다. (To Many or To One) relationship도 attribute와 유사하게 사용하면 된다.

[CoreData] 기초개념 (2): Query & Sorting

데이터베이스에서 그랬듯 Coredata에서도 조건을 주어 원하는대로 데이터를 가져올 수 있다. 또한 정렬순서도 결정할 수 있다. 조건을 줄 때는 NSPredicate 객체를, 정렬을 할 때는 NSSortDescriptor를 사용한다. NSPredicate 어떻게 데이터를 필터링하고 불러올지를 결정하는 객체이다. SQL에서 쿼리문을 날리는 것과 비슷하게 쿼리문을 작성하고 요청할 수 있다. let predicate = NSPredicate(format: "title CONTAINS %@", searchText) request.predicate = predicate NSPredicate의 쿼리문을 작성하고, 거기에 넣어줄 값이 필요하다면 뒤에 작성한다. 위는 NSPredicate의 예시이다. title att..

[RxSwift] Reactive Programming & RxSwift

부스트캠프에서 만난 팀원들과 하는 스터디의 이번주 주제 중 하나는 'RxSwift를 왜 사용하는지 설명하시오.'였다. 그런데 막상 공부하려고 보니 아직 Reactive Programming에 대해서도 정확히 파악하고 있지 못함을 느꼈다. (저번에 스터디도 했는데... 더 열심히 해야겠다...🥲 ) 그래서 이번 기회에 Reactive Programming와 RxSwift의 간단한 개념, 그리고 RxSwift를 왜 사용하는지와 단점까지 차례대로 정리해볼까 한다! Reactive Programming Reactive Programming이란 비동기적 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다. 이러한 Reative Programming의 핵심은 모든 것을 비동기적 데이터의 Stream으로 간주하고, 다..

[CoreData] 기초개념 (1): Entity, CRUD

CoreData란? Apple에서 제공하는 데이터관리 프레임워크로, 데이터를 유지 및 캐싱할 수 있을 뿐 아니라 Cloudkit을 사용해 여러 장치에 데이터를 동기화하는 것도 가능하다. 내부적으로 SQLite를 사용하고 있어 데이터베이스처럼 사용도 가능하지만, 정확히 말하면 데이터베이스는 아니다. SQLite에 데이터를 저장하고 관리하는 프레임워크라고 보는 편이 더 맞는 표현이다. CoreData 설정 프로젝트를 생성할때 Use CoreData를 체크해서 만들 수 있다. 프로젝트를 생성 후 확인해보면 위와 같이 데이터모델 파일이 새로 생겨있음을 알 수 있다. // MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = {..

[Swift] UserDefaults와 Codable, NSCoding

UserDefaults 사용자의 데이터를 저장할 수 있는 영구저장소의 일종이다. plist파일로 존재하여 Key-Data 방식으로 데이터를 읽고 저장한다. Float, Int, Double, Bool, String, URL 등 Swift에서 기본적으로 제공하는 자료구조 및 NSData, NSString, NSNumber 등 NS 관련 자료구조를 저장할 수 있다. 이 외의 인스턴스에 대해서는 추가적인 처리가 필요하다. 공통유형의 객체를 쉽게 읽고 저장할 수 있지만, 하나의 파일로 관리되는만큼 그 크기가 너무 방대해지면 오버헤드가 발생할 수 있다. 따라서 일반적으로 기본적인 몇가지 설정들만 저장될 것이 권장된다. 싱글톤을 기반으로 구성되어 있기 때문에 UserDefaults.standard의 형식으로 사용한..

🍎 Apple/Swift 2022.01.01
반응형