분류 전체보기

커스텀 달력 내가 직접 만든 달력! 기존의 DatePicker 나 UICalendarView 는 제약되어 있는게 너무 많아서 하나하나 커스텀 하기 위해서 직접 달력을 만들었다. 넣은 기능 TabView 로 만들어 page 형태로 드래그가 가능하다. 우측 상단의 버튼을 통해서도 자연스럽게 이동이 가능하다. 오늘 버튼을 누르게 되면 이번달로 이동하면서 오늘이 선택된다. 날짜 선택이 가능하고 다시 선택하면 날짜 선택이 해제된다. 날짜마다 아래쪽에 내가 원하는 View를 넣을 수 있다. Frame 이 일정하다. 어느 달로 가더라도 4주, 5주를 계산하여 높이가 320 으로 일정하다. 코드 CalendarView, Date+Extension 두가지 파일로 구성했다. CalendarView 의 경우 172줄..
· → Xcode
오류 내용 Xcode 에서 아래와 같이 멋진 오류를 마주했다... 도저히 무슨 오류인지 알수가 없다. 시뮬레이터 관련 오류인 것 같은데... 해결 Product → Scheme 로 가서 Run → Environment Variables → + → OS_ACTIVITY_MODE: disable 해주면 해결된다! 참고 nw_connection_get_connected_socket_block_invoke 19 Connection has no connected handler The console of Xcode continue print __nw_connection_get_connected_socket_block_invoke 6 Connection has no connected handler stackoverf..
유클리드 호제법이란? 드디어 알고리즘을 공부하다가 처음 마주한 녀석이다. 두 양의 정수 최대공약수를 구하는 방법으로 유클리드 알고리즘이 있다. 아래의 설명이 가장 이해하기 쉬운것 같아서 가져왔다. Swift로 구현하기 최대공약수를 영어로 하면 Greatest Common Divisor 이기 때문에 보통 GCD 라 한다. 결과값이 나올때까지 자기자신을 계속 사용하는 재귀함수를 구현하여 구할 수 있다. a > b 일 경우 a = bq + r 이기 때문에 r 을 a % b 로 구할 수 있어 반복이 가능하다. 만약 여기서 a < b 일 경우에도 b 가 0 이 되지 않기 때문에 결국 a < b 일 경우 gcd(a, b) = gcd(b, a) 로 결국 가기 때문에 고려할 필요가 없다. func gcd(_ a: In..
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: $..
User Notification앱을 사용하다보면 아래와 같은 알림을 많이 찾아볼 수 있다. 이것을 앱에서 간단하게 어떻게 구현할 수 있을까?  User Notifications | Apple Developer DocumentationPush user-facing notifications to the user’s device from a server, or generate them locally from your app.developer.apple.com Notification 권한 요청하기우선 Notification 을 사용하려면 권한 요청이 필요하다. NotificationCenter 라는 파일을 만들어주고, 권한을 요청할 것이다. NotificationCenter 클래스를 만들어주고, import U..
앱의 시작시점에 무언가를 해주기 위해서라면 아래의 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 Foundation import Network @Observable class NetworkMonitor { private let networkMonitor = NWPathMonitor() private let workerQueue = DispatchQueue(label: "Monitor") var isConnected = false init() { ne..
Swift librarian
'분류 전체보기' 카테고리의 글 목록 (17 Page)