앱에서 유저에게 어떠한 입력값을 받는 경우가 많다. 이메일이나 전화번호 형식을 입력받는다던지, 숫자를 입력받아야 하는 상황이라면 정규표현식을 활용하여 문자열을 검사하면 된다. 공식문서에는 NSRegularExpression을 활용하여 문자열을 검사하는 방법이 나와있다. 하지만 디테일하게 문자열을 검사할 것이 아니라면 좀더 간단하게 검사도 가능하다. NSRegularExpression | Apple Developer Documentation An immutable representation of a compiled regular expression that you apply to Unicode strings. developer.apple.com 아래와 같이 간단한 함수로 문자열 검사가 가능하다! strin..
→ Swift Archive
개발을 하다보면 아래와 같이 스크롤의 상태, 스크롤된 정도를 추적하고 싶을 때가 있다. Swift 개발을 하다보면 NavigationTitle 의 경우가 이렇게 스크롤을 추적하여 상단 툴바에 Title 을 표시해준다. 다양한 인터렉션을 위해서 스크롤의 정도를 추적하고 싶다면... 세가지 방법을 소개하겠다 :) 1. PreferenceKey 와 View extension 활용 아래와 같은 코드를 작성해주면 된다. PreferenceKey 는 하위뷰에서 상위뷰로 값을 전달해주고 싶을 때 사용하게 된다. import SwiftUI struct ScrollOffsetPreferenceKey: PreferenceKey { static var defaultValue: CGPoint = .zero static fun..
커스텀 달력 내가 직접 만든 달력! 기존의 DatePicker 나 UICalendarView 는 제약되어 있는게 너무 많아서 하나하나 커스텀 하기 위해서 직접 달력을 만들었다. 넣은 기능 TabView 로 만들어 page 형태로 드래그가 가능하다. 우측 상단의 버튼을 통해서도 자연스럽게 이동이 가능하다. 오늘 버튼을 누르게 되면 이번달로 이동하면서 오늘이 선택된다. 날짜 선택이 가능하고 다시 선택하면 날짜 선택이 해제된다. 날짜마다 아래쪽에 내가 원하는 View를 넣을 수 있다. Frame 이 일정하다. 어느 달로 가더라도 4주, 5주를 계산하여 높이가 320 으로 일정하다. 코드 CalendarView, Date+Extension 두가지 파일로 구성했다. CalendarView 의 경우 172줄..
TabView 를 만들다가 이상한(?) 현상을 발견했다. TabView 를 생성하고, 두번째 페이지부터 시작하게 되면 selection 을 첫번재 페이지로 가게 바꿔줘도 Tab 이 변경되지 않는다! 이게 무슨 말이냐 하면... 이상한 현상 아래와 같은 화면을 만드는 아주 간단한 코드를 만들었다고 해보자. 상단은 페이지를 표시해주고 아래 버튼을 누르면 해당 페이지로 이동하는 코드이다. import SwiftUI struct ContentView: View { @State private var selection = 1 var body: some View { VStack { Text("Page: \(selection)") ZStack { Color(.systemGray3) TabView(selection: $..
앱의 시작시점에 무언가를 해주기 위해서라면 아래의 init() 에 포함시켜 주면 된다. 하지만 앱이 종료되는 시점에 무언가를 해야 하거나 앱의 디테일한 상태 시점에 따라서 무언가를 해줘야 할 때는 어떻게 할까? import SwiftUI @main struct SampleApp: App { init() { print("app start") } var body: some Scene { WindowGroup { ContentView() } } } AppDelegate, SceneDelegate 갑자기 SwiftUI 에서 무슨 Delegate 냐 하는데... 알아두면 유용한 친구들이다... 후에 구조체나 클래스가 자신의 일부 책임을 다른 타입의 인스턴스에게 위임하는 Delegate 패턴에 대해서 알아보도록 하..
ScenePhase? 앱을 만들다보면 앱이 잠깐 백그라운드로 갔을때나 백그라운드에서 다시 돌아왔을때, 시점이 필요할때가 있다. 나같은 경우는 잠깐 앱을 background 상태로 두고 권한을 변경한다면? 이 것을 UI 에 바로 적용시킬 수 없을까? 하는 궁금증에서 찾아보았는데 방법이 있었다! 바로 ScenePhase 를 활용하면 된다. 공식문서에 정말 친절하게 사용설명이 되어있다. ScenePhase | Apple Developer Documentation An indication of a scene’s operational state. developer.apple.com ScenePhase 사용해보기 사용방법은 아주 간단하다. 아래와 같이 @Environment 로 변수를 선언해주고, scenePhas..
네트워크 연결 확인 뷰아래와 같이 네트워크 연결에 따라서 실시간으로 인터넷 연결, 인터넷 연결 안됨 창을 표시한다. NetworkMonitor 클래스 생성아래와 같이 SwiftUI 에 새로 도입된 @Observable 이 사용된다. init() 을 하게 되면, isConnected 라는 변수를 인터넷의 연결여부에 따라서 업데이트 해준다.import Foundationimport Network@Observableclass NetworkMonitor { private let networkMonitor = NWPathMonitor() private let workerQueue = DispatchQueue(label: "Monitor") var isConnected = false i..
글래스모피즘? 아주 간단하게 설명하면 UI 에 반투명 유리효과를 주는 것인데. SwiftUI 로 앱을 개발하다 보면 강제로(?) 만날 수 있다. 예를 들면 위는 NavigationTitle 을 생성하고 위로 스크롤 하면 타이틀 뒤로 가는 뷰는 살짝 흐릿하게 보이는 것을 볼 수 있다. 이것을 구현해 볼 것이다. 제공되는 Material 사용 아래와 같은 Rectangle 을 사용하여 overlay 시키면 간단하게 글래스모피즘을 적용할 수 있다. 종류도 ultraThin 부터 ultraThick 까지 5종류의 Material 을 고를 수 있다. 많은 애플 컴포넌트들이 Material 가 사용됨을 알 수 있다. 예를 들면 Alert 나 예시로 보여준 NavigationTitle 등등... Rectangle()..