본문 바로가기

iOS

(29)
UserDefaults에서 .value(forKey:)와 .object(forKey:)는 뭐가 다른 건가요? https://stackoverflow.com/questions/42472327/what-is-the-difference-between-objectforkey-and-valueforkey-in-userdefault What is the difference between object(forKey:) and value(forKey:) in UserDefaults? I've set some user defaults using let userDefaults = UserDefaults.standard, and when I'm retrieving them, I can use any of these: jobTextField.text = userDefaults.object(forKey: "job") as? String..
논리 게이트를 Swift로 구현해 보자! AND게이트 (논리곱) 두 개의 입력이 모두 참일때 참을 반환, 하나라도 거짓일 때 거짓을 반환 let sample1 = [true, true, true, true] let sample2 = [true, true, true, false] let sample3 = [true, false, false, false] let sample4 = [false, false, false, false] func checkAllTrue(in array: [Bool]) -> Bool { array.reduce(true) { $0 && $1 } } checkAllTrue(in: sample1) // true checkAllTrue(in: sample2) // false checkAllTrue(in: sample3) // fa..
WidgetKit 시작하기 💫 WidgetKit 실행하기 먼저WidgetTutorial 프로젝트를 생성주었다. (사진 없음..ㅎ) 그리고 File > New > Target...을 눌러 Widget Extentsion을 찾아 추가해준다. MyWidget이라는 이름으로 위젯을 추가하고 Include Configuration Intent는 체크해제하고 Finish를 눌러 위젯을 추가한다. 만약 스키마를 추가할지 팝업이뜨면 Activate를 눌러서 추가해준다. 그러면 이제 MyWidget폴더와 파일이 생성된것을 확인할 수 있다..! 타겟이 MyWidgetExtention으로 되어있다면 WidgetTutorial앱으로 변경하고 실행해보자 앱을 빌드하고 바탕화면으로 나간뒤 위젯이 잘 나오는지 확인해보면 정상적으로 되는 것을 볼 수 있다~!..
SwiftUI 그라데이션 텍스트 구현하기 💫 공통으로 사용할 변수 private let sampleText = "🍎 iOS 연구소\n It's Gradient Text View :)" private let commonGradient = LinearGradient(colors: [.red, .blue, .green, .yellow], startPoint: .leading, endPoint: .trailing) 공통으로 사용할 텍스트와 Gradient뷰를 변수로 할당해 놓았다. 🌈 방법 1) Gradient에 Text를 mask해서 보여주기 private var gradientTextView1: some View { commonGradient .mask( Text(sampleText) .font(.title) .multilineTextAlignme..
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에서 만든 어플리케이션에 약간의 사이드 이펙트와 화면을 ..