본문 바로가기

Project56

[SwiftUI Project] NavigationView가 강제로 dismiss 되는 문제 해결 검색화면에서 NavigationLink를 사용해서 detatil 화면으로 넘어갔을 때 문제가 있었다. 즐겨찾기 버튼을 눌렀을 때 화면이 강제로 dismiss 되는 문제였다. 검색해본 결과 NavigationLink를 두번 사용해서 발생한 버그인 것으로 추측된다. 왓치리스트 -> 검색화면 -> 디테일 화면 NavigationLink를 한번만 사용할 때는 문제가 없었다. 왓치리스트 -> 디테일화면 다음의 코드를 NavigionView에 작성해주니 해결되었다. NavigationView { content } .navigationViewStyle(StackNavigationViewStyle()) SwiftUI NavigationLink pops out by itself I have a simple use cas.. 2022. 10. 1.
[SwiftUI Project] Core Data 즐겨찾기 기능 구현하기 이번에는 Cote Data로 즐겨찾기 기능을 구현하겠습니다. 작업의 흐름은 다음과 같았습니다. 1. Core Data를 사용하기 위해 Container 생성 2. CRUD 함수가 작성되는 WathlistDataService 생성 3. ViewModel에서 Core Data로부터 데이터를 받아오는 함수 생성 4. View에서 호출할 수 있도록 작성 1. Core Data를 사용하기 위해서 Container를 생성하고 모델을 만들어 줍니다. 2. Create, Read, Update, Delete 함수와 값이 저장될 변수들을 DataService 파일에 작성해줍니다. class WatchlistDataService { private let container: NSPersistentContainer priva.. 2022. 9. 28.
[SwiftUI Project] Statistic 정보 화면 만들기 이번에는 DetatilView에서 코인에 대한 정보를 나타내는 화면을 구현합니다. 단순히 HStack으로 반복 작업해줘도 되지만, 향후 유지보수가 수월하도록 Model, ViewModel 작업을 해서 ForEach 문으로 작성했습니다. 1. StatisticModel 생성 import Foundation struct StatisticModel: Identifiable { let id = UUID().uuidString let title: String let value: String init(title: String, value: String) { self.title = title self.value = value } } 2. StatisticView 생성 import SwiftUI struct Stati.. 2022. 9. 22.
[SwiftUI Projetct] 앱에 TradingView 임배드하기 이번에는 DetatilView에 TradingView를 임배드 할 것입니다. SwiftUI로 TradingView를 임배드 한 자료를 구글링해도 찾을 수가 없어서 HTML 렌더링 자료를 보면서 구현하였습니다. 작업 흐름은 다음과 같습니다. 1. TradingView Widget HTML 코드를 얻습니다. Free Charting Library by TradingView Free Charting Library for your website or mobile app. TradingView Charting Library comes with API to show your own data. Customizable and easy to install. www.tradingview.com 2. WebKit를 사용하여.. 2022. 9. 22.
[SwiftUI Project] NavigationLink Lazy View 만들기 이번에는 NavigationLink Lazy Loding에 대해서 알아보겠습니다. NavigationLink로 화면전환을 할 때 아래와 같이 작성하는게 일반적인 것 같아요. NavigationLink( destination: DetailView(coin: coin), label: { CoinRowView(coin: coin) } ) struct DetailView: View { var coin: CoinModel init(coin: CoinModel) { self.coin = coin print("\(coin.name)") } var body: some View { Text(coin.name) } } 보여지는 것으로는 문제가 없어보이지만, print로 무슨 일이 일어나고 있는지 살펴보겠습니다. Detai.. 2022. 9. 19.
[SwiftUI Project] 정렬 기능 만들기 (시총, 가격순, 변동률순) with Combine 이번에는 코인 리스트를 시총, 가격순, 변동률 순으로 정렬할 수 있는 버튼을 만들겠습니다. 먼저 ViewModel에 enum과 @Published 프로퍼티를 만들어줍니다. @Published var sortOption: SortOption = .rank enum SortOption { case rank, price, pricereversed, priceChangePercentage24H, priceChangePercentage24HReversed, holdings } 기존에 HomeView에 데이터를 업데이트해주던 addSubscribers 함수에 .combineLatest($sortOption)으로 구독자를 생성해주었습니다. init() { addSubscribers() } func addSubscri.. 2022. 9. 19.