Swift에서 날짜를 다루기 위해서 Date 클래스를 사용한다. Date 클래스는 Foundation 프레임워크에서 제공되며, 날짜와 시간 정보를 저장하고 조작할 수 있는 기능을 제공한다. # 현재 날짜와 시간 가져오기 import Foundation let currentDate = Date() # 특정 날짜와 시간을 나타내는 Date 인스턴스 생성 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" if let customDate = dateFormatter.date(from: "2023-08-24 12:00:00") { print("Custom date:", customDate) } # 날짜 계산 //..
SwiftUI에서 로컬 알림을 사용하기 위해서 삽질을 하다가 알게 된 내용들을 정리했다. 이런 정보들을 미리 알고 있었다면, 삽질을 덜 했을 텐데..... ㅜㅜ * 알림(notification)을 표시하려면 2가지 방법이 있다. 1. 로컬에서 알림을 등록하여서 특정 조건으로 알림 표시 2. 서버에서 알림을 푸시해서 알림 표시 * 앱에 등록되어 있는 로컬 알림은 앱 삭제 시, 모두 같이 삭제된다. * 알림 배지는 알림 등록 시 노티피케이션 콘텐츠의 배지 정보로 표시된다. 시스템이 자동으로 카운터를 해주지 않는다. 따라서 카운터를 하고 싶으면 개발자가 카운터 된 배지 정보로 노티피케이션 콘텐츠에 등록해야 한다. ( 단, 서버 알림은 UNNotificationServerExtension으로 정보를 가로채서 정..
SwiftUI에서 코드를 짜다가 정말 예상치도 못한 일이 발생했다. 자식 뷰에서 State를 초기화할 때, 데이터를 확인하기 위해서 print()를 포함시켰다. 그리고 부모 뷰가 리빌드될 때마다, 자식 뷰의 State가 초기화가 되면서 print()가 출력되는 것이였다. 대략적인 코드는 다음과 같다. import SwiftUI struct ContentView: View { @State private var text: String = "" var body: some View { NavigationStack { TextField(text: $text, label: { Text("TextField") }) NavigationLink(destination: { ChildView1() }, label: { Te..
SwiftUI에서 내비게이션을 통해 이전 화면에서 현재화면으로 이동했을 경우, 다음과 같은 방법으로 이전 화면으로 돌아갈 수 있다. 1. 먼저 dismiss 환경을 가져온다. @Environment(\.dismiss) private var dismiss 2. dismiss() 함수를 호출해서 이전 화면으로 돌아간다. dismiss() 다음 SecondView는 Button를 탭하면 이전 화면으로 돌아가는 예제코드이다. struct SecondView: View { @Environment(\.dismiss) private var dismiss var body: some View { Button(action: { dismiss() } }) { Text("Back") } } }

문제의 코드 EditButton은 editMode를 지원하는 컨테이너의 environment의 editMode를 토글한다. 나는 EditButton을 사용 시 EditMode를 감지하여 Text로 출력하고 싶었다. struct ContentView: View { @Environment(\.editMode) private var editMode var body: some View { VStack { NavigationStack { List { Text(editMode?.wrappedValue == .active ? "Edit Mode" : "Normal Mode") ForEach(0..
다음은Label에 동일하게 적용되는 공통 스타일을 사용자 정의 LabelStyle을 만들고, LabelStyle에 사용자 정의 스타일을 확장하고 사용하는 예제이다. import SwiftUI struct TrailingIconLabelStyle: LabelStyle { func makeBody(configuration: Configuration) -> some View { HStack { configuration.title configuration.icon } } } extension LabelStyle where Self == TrailingIconLabelStyle { static var trailingIcon: Self { Self() } } 확장에서 보면 where Self == TrailingI..
xcdoe에서 최신 iOS 버전을 지원하지 않으면 아이폰에서 앱을 실행시킬 수 없다. 아래 사이트에서 아이폰에 설치된 iOS 버전을 다운 받아서 추가해야 한다. https://github.com/filsv/iOSDeviceSupport GitHub - filsv/iOSDeviceSupport: Xcode iPhoneOS (iOS) DeviceSupport files (6.0 - 16.5) Xcode iPhoneOS (iOS) DeviceSupport files (6.0 - 16.5) - GitHub - filsv/iOSDeviceSupport: Xcode iPhoneOS (iOS) DeviceSupport files (6.0 - 16.5) github.com 다운로드한 파일을 압축해제하고, 아래 경로에 ..
TextField가 화면에 나타날 때, TextField에 있는 텍스트를 전부 선택하는 방법은 다음과 같다. TextField("Enter rename", text: $groupName) .onAppear { DispatchQueue.main.async { UIApplication.shared.sendAction(#selector(UIResponder.selectAll(_:)), to: nil, from: nil, for: nil) } }