IOS(20)
-
iOS 테스트코드의 이모저모 - 2편
Test Double Dummy 무언가 값을 채우기 위해 사용하지만 사용되지 않는 객체를 의미 보통 함수, 메서드의 인자를 채울 때 사용 뷰모델의 초기 상태를 테스트 할 때 만약, 뷰모델이 두개의 타입에 대해 의존적인 상황이라면 Dummy데이터를 만들어줌으로 뷰모델을 생성하여 테스트 할 수 있다. struct DummyWatchlistStore: WatchlistStore { func update(_ stockSymbols: [String]) throws { } func retrieve() throws -> [String]? { [] } } struct DummyQuotesService: QuotesService { func getQuotes(symbols: [String], completion: @es..
2023.12.06 -
iOS 테스트코드의 이모저모 - 1편
TDD(Test-Driven Development) 정의 - 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나 TDD는 개발 프로세스를 크게 3가지로 나눌 수 있다. 코드 작성 테스트 코드 작성 리팩토링 위 그림을 토대로 3가지를 조금 더 세분화하여 설명하면 다음과 같다. 1. 코드 작성 테스트 코드를 실행할 수 있도록 최소한의 코드를 작성해야한다. 여기서 말하는 최소한이란 단순히 곧바로 기능을 다 하는것이 아닌 테스트케이스가 실패하도록 만들어야하며, 한가지의 테스트코드 작성이 끝나면 해당 테스트코드 해결을 위해 다시 최소한의 코드를 작성해야한다. 2. 테스트 코드 작성 테스트 코드 작성의 핵심은 현재 구현된 코드가 실패하도록 만드는 테스트 케이스를 작성하는 것이다. 예를들어, 자연수 ..
2023.12.04 -
FSCalendar 스크롤 시 캘린더가 사라지는 이유
기존 코드 FSCalendar/Example-Swift/FSCalendarSwiftExample/FSCalendarScopeViewController.swift at master · WenchaoD/FSCalendar FSCalendar의 깃허브 예시 코드를 사용할 경우 다음과 같이 정상적으로 작동 가능하다. 전체 코드 import UIKit import FSCalendar class ViewController: UIViewController { @IBOutlet weak var calendarHeightAnchor: NSLayoutConstraint! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var calendar: FSCalendar! p..
2023.08.23 -
WWDC22 - Design protocol interface in Swift - 2편
protocol Animal { var isHungry: Bool { get } associatedtype FeedType: AnimalFood func eat(_: FeedType) } 1편에서 여러개의 any Animal의 eat(_:)메서드를 실행하지 못하는 문제가 있었습니다. 이를 조금 더 구체화 하여 식물을 재배하고 -> 수확하고 -> 동물에게 먹이는 작업을 구현을 합니다. struct Cow: Animal { func eat(_: Hay) { ... } } struct Hay: AnimalFeed { static func grow() -> Alfalfa { ... } } struct Alfalfa: Crop { func harvest() -> Hay { ... } } let cow: Cow =..
2023.07.27 -
WWDC22 - Design protocol interfaces in Swift - 1편
WWDC22 - Design protocol interfaces in Swift Understand Type Erasure protoocl Animal { } struct Chicken: Animal { func produce() -> Egg {...} } struct Cow: Animal { func produce() -> Milk {...} } protocol Food {...} struct Egg: Food {...} struct Milk: Food {...} 닭과 소가 달걀과 우유를 생산하도록 구현하였을 때 Animal프로토콜 내에 다음과 같이 추상화 할 수 있습니다. protocol Animal { associatedtype CommodityType: Food func produce() -> C..
2023.07.25 -
[Realm Swift] - “Object type ‘RealmSwiftObject’ is not managed by the Realm. If using a custom `objectClasses` / `objectTypes` array in your configuration, add `RealmSwiftObject` to the list of `objectClasses` / `objectTypes`.” 오류 해결
문제 상황 제너릭 타입을 DB(Realm)관련 객체에 사용하다 크러쉬 난 에러 내용이다. 나는RealmSwift.Object를 이용하여 DB내용을 탐색하다가 크러쉬가 났다. let dbObjects = realm.objects(Object.self) 대충 오류 내용을 보면 RealmSwift의 Object는 관리를 해주지 않기 때문에 따로 추가하여야 한다는 내용?인것 같았다. RealmFetchable등의 프로토콜을 채택하여 사용할려고 해봤지만 구체적인 타입 명시가 필요한 것 같다. 문제 해결 private let type: Object.Type let dbObjects = realm.objects(type.self) 위와 같이 명확한 객체 타입을 받아 명시해주는 방법 final class LocalDB..
2023.05.31