- Total
목록오뚝이 개발자/SwiftUI (39)
꿈꾸는리버리
[Swift Concurrency 시리즈] 처음 개발을 시작했을 때 3개의 난관이 있었다. 제일 처음에는 for문이었고, 두번째는 네트워킹, 그리고 세번째는 아키텍쳐... iOS로 네트워킹을 깊게 파 본적이 없어서 이번에 Concurrency에 대해 공부해야겠다는 마음을 먹었고, 그 시작으로 저번에는 에러처리 try-catch문 / Result에 대해 공부했다. 그리고 오늘은 Async/Await, @escaping !! 네트워킹을 하게 되면 요청 후 답이 올 때까지 기다려야 한다. 그리고 답이 온 후에 재요청을 보낼 수도 있고,,, 하면서 네트워킹을 시작하면 생각해야 하는 사항들이 많아진다. 이를 위해서 나온 게 swift에는 @escaping, Combine, Async/Await가 있다. 하지만....
🔧 문제 상황 위와 같이 iOS 16.0일 경우와 아닌 경우를 분기해서 패딩을 넣어주는 코드가 있다. 원래 였다면, View Modifier가 하나 추가되는 것임에도 이렇게 두 번 코드를 분기해서 작성해야 했다. 💬 고민 Point 그래서 생각한 View Modifier를 분기할 수 있는 방법 ! 🌟 문제 해결 1️⃣ [ if ] ViewBuilder 추가 extension View { @ViewBuilder func `if`(_ condition: Bool, transform: (Self) -> Content) -> some View { if condition { transform(self) } else { self } } } 이렇게 조건을 분기해서 View modifier를 작성할 수 있도록 View..
Cherish 백업 기능을 구현하면서 다시 공부하게 된 Swift Concurrency.... 오늘부터 Swift Concurrency 시리즈를 올릴려고 한다. 그리고 그 시작으로 오늘은 Swift Concurrency 1) 에러처리에 대한 이야기로, try-catch문과 Result에 대한 내용이다! 왜 try-catch문/ Result를 사용해야 할까? 1️⃣ 예시 코드 위 코드를 확인해보자. View에서는 Viewmodel을, Viewmodel에서는 manager를 가지고 있다. ViewModel의 fetchTitle 함수를 통해 title 값을 변경한다. 이때 Manager의 fetchTitle에서는 isActive 값을 통해서 "New Text!"를 반환할지, nil을 반환할지 결정하게 된다...
iOS 앱에서는 필수로 들어가는 소셜 로그인을 구현한다면, 애플로그인을 반드시 구현해야 한다고 한다. ( apple 심사 지침 참고 ) 🔮 코드 구현 1️⃣ capability 추가하기 XCode Project > Signing & Capabilities > + Capability > Sign In with Apple을 검색 후 추가! 2️⃣ AuthenticationServices Apple 로그인을 사용하기 위한 프레임워크인 AuthenticationServices을 추가해준다. import AuthenticationServices 3️⃣ 코드 구현 애플 ... 너는 계획이 다.. 있구나? SignInWithAppleButton 을 활용하면 로그인을 쉽게 구현할 수 있다. SignInWithApple..
만약 iOS가 14일 때만 foreground를 red로 주고 싶다고 하자. 1. View를 분기 처리 하기 struct ContentView: View { var body: some View { if #available(iOS 14.0, *) { Text("iOS 14.0") .padding() .foreground(Color.red) } else { Text("iOS 14.0 아님") .padding() } } } 2. modifier를 분기 처리 하기 이렇게 View extension에 분기 처리를 할 수 있는 함수를 추가하고, extension View { /// Applies the given transform if the given condition evaluates to `true`. ///..
☁️ Widget 시리즈 기본 시리즈SwiftUI Widget 딱대.. (1/3) 위젯 기본 개념 + 구현SwiftUI Widget 딱대.. (2/3) : 앱 내의 데이터를 widget에 띄우기SwiftUI Widget 딱대.. (3/3) : 위젯을 눌렀을 때 다른 화면으로 뜨게 하기 에러 시리즈SwiftUI Widget 딱대(짐).. : 위젯 memory 제한SwiftUI Widget 딱대(짐).. : localization 적용SwiftUI Widget 딱대(짐).. : 위젯에 폰트가 안 먹혀요...[Error 해결] Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.SwiftUI Wid..
☁️ Widget 시리즈 기본 시리즈SwiftUI Widget 딱대.. (1/3) 위젯 기본 개념 + 구현SwiftUI Widget 딱대.. (2/3) : 앱 내의 데이터를 widget에 띄우기SwiftUI Widget 딱대.. (3/3) : 위젯을 눌렀을 때 다른 화면으로 뜨게 하기 에러 시리즈SwiftUI Widget 딱대(짐).. : 위젯 memory 제한SwiftUI Widget 딱대(짐).. : localization 적용SwiftUI Widget 딱대(짐).. : 위젯에 폰트가 안 먹혀요...[Error 해결] Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.SwiftUI Wid..
사용자가 일기 형식 순서를 드래그 드롭을 통해 변경하도록 하는 기능이 필요했다. struct ContentView: View { @State private var items = ["일번", "이번", "삼번"] var body: some View { NavigationView { VStack { List { ForEach(items, id: \.self) { item in Text("\(item)") }.onMove { (source: IndexSet, destination: Int) -> Void in self.items.move(fromOffsets: source, toOffset: destination) } } } .environment(\.editMode, .constant(.active)) //..