Combine이란?반응형 프로그래밍의 개념을 기반으로 개발된 프레임워크시간 경과에 따른 값을 처리하기 위한 통합된 선언적 API반응형 프로그래밍데이터 스트림과 변화의 전파에 관련된 선언형 프로그래밍 패러다임이다.데이터 스트림 : 시간에 따라 만들어진 일련의 이벤트 ex) 탭 이벤트 스트림선언형 프로그래밍명령형 프로그래밍 선언형 프로그래밍 명령형 프로그래밍선언형 프로그래밍How(어떻게)What(무엇)코드가 어떻게 작업을 수행해야 하는지결과에 집중하고 구체적인 행위를 감춤행위를 정의하고 행위에 데이터를 전달핵심 개념들Publisher : 값을 방출하거나, 완료 이벤트나 실패 이벤트를 전할 수 있다.Just() : 단일 값을 즉시 생산하는 Publisher. 에러 타입은 항상 Never이다.Future() :..
SplashView 작성 // SplashView.swift struct SplashView: View { var body: some View { VStack { Image("flo-splash") .resizable() // .aspectRatio(contentMode: .fill) .edgesIgnoringSafeArea(.all) } } } ContentView 작성 // ContentView.swift struct ContentView: View { @State private var showMainView = false var body: some View { VStack { if showMainView { PlayerView() } else { SplashView() .onAppear { Disp..
String에 index로 접근 let index = str.index(str.startIndex, offsetBy: i) let char = str[index] 공백을 기준으로 문자열 나누기 let strs = str.split(separator: " ") 부분문자열 구하기 let subStr1 = t[startIndex.. 정수 대문자, 소문자 변경 let lowerStr = str.lowercased() // -> 소문자 let upperStr = str.uppercased() // -> 대문자 캐릭터 ↔ 아스키코드 변경 // A ~ Z : 65 ~ 90 // a ~ z : 97 ~ 122 let asciiIntValue = Int(char.asciiValue!) // 캐릭터 -> 아스키 let c..
이렇게 자동스크롤이 되는 배너를 구현하려고 한다. 일단 배너는 의외로 간단하게 구현할 수 있다. TabView로 구현하면 된다! 배너 구현 코드 // BannerView.swift var body: some View { TabView { ForEach(viewModel.banners, id: \\.self) { banner in Image(banner.image) .resizable() .scaledToFill() } } .tabViewStyle(.page) } TabView에 .tabViewStyle(.page)를 이용하면 된다. 자동 스크롤 구현 코드 // BannerView.swift @State private var currentIndex = 0 var body: some View { TabVie..
// ProductDetailView.swift Button { isModalPresented.toggle() } label: { Text("구매하기") } .buttonStyle(ProductButtonStyle(height: 56, isMaxWidth: true)) .sheet(isPresented: $isModalPresented) { ProductOrderView(viewModel: viewModel) .presentationDetents([.height(80)]) } 이렇게 구매하기 버튼을 누르고 결제하기, 장바구니 modal을 띄우면 현재 뷰가 갑자기 자기 혼자 사라진다.. dismiss를 누른 것 처럼… 근데 알고보니 문제는 관련 뷰들의 코드에 없었다! 해결 방법 // MainTabView...
SwiftUI로 프로젝트를 하는데 이런 장바구니 화면에서 문제가 생겼다. 첫번째 아이템이든 두번째 아이템이든 세번째 아이템이든 무엇을 삭제해도 마지막 아이템이 사라지는 이슈가 있었다. 근데 웃긴게 프린트 찍어보니까 뷰모델에서는 제대로 적용돼서 원하는 요소가 삭제됐는데 뷰에서는 그게 안 되는 것… 일단 해결을 했는데 index를 이용해서 삭제하는게 아니라 id를 이용해서 삭제를 하면 된다. 기존의 코드 // CartView.swift @StateObject var viewModel = MyPageViewModel.shared ForEach(viewModel.cartItems.indices, id: \.self) { index in CartCardView(viewModel: CartViewModel(view..