전체 글 (33) 썸네일형 리스트형 Property wrapper Property wrapper는 일반적으로 공통되는 부분을 묶고 같은 보일러 플레이트가 작성 될 여지가 있을 때 Property wrapper를 사용하면 좀 더 직관적이고 클린한 코드를 작성할 수 있다. 💫 프로젝트에서 사용할 UserDefault를 PropertyWrapper를 사용해 관리해보자 Before class Settings { static let shared = Settings() private init() {} var isDarkMode: Bool { get { UserDefaults.standard.bool(forKey: "isDarkMode") } set { UserDefaults.standard.set(newValue, forKey: "isDarkMode") } } } isDarkMo.. SwiftUI에서 UITextField 커스텀하여 사용하기 💫 SwiftUI의 TextField의 사용 우리가 보통 사용하는 SwiftUI의 TextField컴포넌트를 사용하는 방법 import SwiftUI struct ContentView: View { @State private var text = "" var body: some View { VStack { Text("Text: \(text)") .frame(maxWidth: .infinity, alignment: .leading) TextField("TextField", text: $text) } } } SwiftUI의 기본 제공 TextField는 쓰기에는 무난하지만 여러 delegate를 사용해 커스텀 해야하는 상황이 오면 결국 UITextField를 커스텀 해 사용하는 경우가 있다. 이 방법은 Tex.. SwiftUI iOS 15에서 ScrollViewReader가 되지 않는 문제 나는 보통 iOS14의 테스트 기기에서 작업을 하는데 그 이유는 기존 버전에서 잘 동작하면 새 버전에서는 반드시 된다는 전제가 있었고 그 전에 iOS15에서 정상 동작하던게 이전 버전에서 버그가 발현되는 문제가 있었던 적이 있어서 가능하면 구 버전 기기로 테스트하는 경향이 있다. 그런데!! 최근 작업하면서 iOS14인 나의 테스트 기기에서는 정상동작했지만 iOS15에서 버그가 발생한 경우가 있었다. 오늘은 이번에 발현하고 수정한 ScrollViewReader에서 scrollTo(:to:)이 실행될 때 버그를 분석하고 수정한 것을 공유하고 앞으로도 버그가 있을 때마다 기록 해 두어야겠다.. 🤬 💫 Problem https://developer.apple.com/documentation/swiftui/scr.. SwiftUI와 상태관리 Ref) https://pilgwon.github.io/post/episode-65-swiftui-and-state-management-part-1 [번역] Point-Free #65 SwiftUI와 상태 관리 - 파트 1 거대하고 복잡한 아키텍쳐를 만드는 일엔 어떤 장애물이 도사리고 있을까요? 오늘은 SwiftUI로 앱을 만들어보면서 애플은 그 장애물을 어떻게 극복했는지 알아보려고 합니다. pilgwon.github.io https://pilgwon.github.io/post/episode-66-swiftui-and-state-management-part-2 [번역] Point-Free #66 SwiftUI와 상태 관리 - 파트 2 오늘은 파트 1에서 만든 어플리케이션에 약간의 사이드 이펙트와 화면을 .. SwiftUI에서 스켈레톤 UI 적용하기 Steleton UI ? 먼저 스켈레톤 UI는 앱에서 데이터를 받아오는 지연시간 동안 임시로 뼈대의 뷰를 보여주어 사용자에게 지루함을 덜어주고 UI상으로도 깨지는 현상을 줄여주는 효과가 있는 기법이다. 예) 유튜브의 스켈레톤 UI 적용 구현하기 위의 유튜브 스켈레톤 UI를 목표로 클론해보자..! 먼저 데이터가 있는 것처럼 간단하게 뷰를 그려보았다. struct ContentView: View { var body: some View { ScrollView { ForEach(0.. [SwiftUI] EnvironmentObject / ObservedObject / StateObject EnvironmentObject, ObservedObject, StateObject 세가지의 특징을 간단한 예제를 통해 알아보자 class ViewModel: ObservableObject { @Published var count = 0 } @main struct [YourAppName]: App { var body: some Scene { WindowGroup { ContentView() .environmentObject(ViewModel()) } } } struct ContentView: View { @EnvironmentObject var environment: ViewModel var body: some View { VStack { AView(observed: ViewModel()) Button(.. [Swift] Codable로 JSON파싱하기 -확장- 앞서 기초편에서 간단하게 JSON을 파싱하는 법을 알았는데 확장편에서는 마주할 법한 상황을 가정하여 좀 더 자세하게 다뤄 볼 예정이다. 목차 1. Json에 null값이 들어 왔을 때 2. 아예 Key값이 안들어 왔을 때 3. Json안에 Object가 들어 있을 때 4. CordingKeys 사용해보기 Json에 null값이 들어 왔을 때 struct User: Codable { let name: String let age: Int let picture: String let isActive: Bool } 우리는 기초편에서 User의 모델을 위와 같이 정의했다. 하지만 이 구조체는 모든 값이 유효할 때만 데이터를 성공적으로 파싱할 수 있다. { "name": "이기회", "age": 77, "pictur.. [Swift] Codable로 JSON파싱하기 -기초- RESTful API 의 기본인 JSON데이터를 Swift의 Codable을 사용해 파싱해보자! 먼저 초기 JSON과 UI를 대략 그려본다. { "name": "이기회", "age": 77, "picture": "sample", "isActive": true, } struct ContentView: View { var body: some View { VStack { Image(systemName: "person") .resizable() .frame(width: 150, height: 150) .clipShape(Circle()) .overlay(Circle().stroke(.gray, lineWidth: 4)) Text("Name") Text("Age") } } } 이제 위의 UI에서 Image에 Js.. 이전 1 2 3 4 5 다음