SWiFT 28

상태를 감지하는 방법

적용한 Keyboard show, hide 감지 하는 기능이다. 나중에 상태 감지 후 bool 만 받아서 어떤 내용으로 감지할 때 쓰기 좋을 것 같고처음 보는 코드들이 있어서 정리해본다. import Foundationimport Combineimport UIKitextension Publishers { static var keyboardWillChange: AnyPublisher { let willShow = NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification) .map { _ in true } let willHide = Notification..

iOS/Swift 2025.04.23

Accessing StateObject's object without being installed on a View. This will create a new instance each time

SwiftUI에서 @StateObject를 사용할 때 생길 수 있는 오류이다. @StateObject는 객체가 뷰의 생애주기 동안 한 번만 생성된다는 특징이 있다.뷰가 갱신되거나 재구성될 때 해당 객체가 계속 유지되도록 보장하는 속성 래퍼이다. @StateObject를 뷰 안 에서 직접 사용하지 않고, 다른 곳에서 객체에 접근하려고 할 때 문제가 생긴다. 뷰 외부에서 접근하려고 할 때, SwiftUI는 그 객체가 뷰에 제대로 설치되지 않았다는 메시지를 띄운다.@StateObject가 제대로 선언되지 않거나, 다른 곳에서 @StateObject에 접근하려고 할 때 나는 문제이다. // 잘못된 예시 (뷰 외부에서 @StateObject에 접근)@StateObject var myObject = MyObj..

iOS/ErrorDictionary 2025.04.22

SwiftData 모델에 있는 데이터가 빈 값일 수도 있고 아닐 수도 있을 때, 어떻게 처리해야하지?

Big Idea (큰 주제): 옵셔널 Essential Question (핵심 질문): 가지고 있는 데이터 따라 옵션적으로 값을 보여주거나, 보여주지 않거나 하려면 어떻게 해야할까? Challenge (도전 과제): 알아보고, 직접 구현 해보고, 정리해보자 Activities (학습 활동): 현재 하고 있는 챌린지에서 이렇게 데이터를 표현해야한다.1. 값이 무조건 있어야한다. (이게 기본, Non-Optional 타입)2. 값이 있을 수도, 없을 수도 있다.3. 값이 없으면 보여주지 않아야한다.4. 값이 어떤가에 따라 다르게 처리해야한다. 이러한 조건에서 어떻게 앱을 구현해야할지 찾아봐야겠다. 일단 데이터에 값이 있을 수도 있고, 없을 수도 있음을 표현하는 방법은 여러가지가 있다. 프로그래밍 적으로..

iOS/Swift 2025.04.19

SwiftData 에서 여러개의 모델을 가져올 때 어떻게 해야할까?

만약 SwiftData 에 선언한 모델이Candy, Chocolate, Cookie 라고 하자. 이 값들을 모두 가져와달라고 선언하려면 어떻게 해야할까? 나는 이 질문을 받았을 때, 공부를 안해서 배열로..이케..대충... [] 대괄호 쓰고..... 이렇게 담으면 되지 않으까여ㅎ 했다. 그리고 질문 시간이 끝난 뒤, 제대로 공부하자고 생각해서 WWDC 도 보면서 공부를 하려고 한다. "했다"가 아님. 간단하게 여러개의 모델 선언하는 방법... 배열로 가져오는게 맞긴 맞았다.@mainstruct MyApp: App { var body: some Scene { WindowGroup { ContentView() } .modelContain..

iOS/Swift 2025.04.18

Scrumdinger 분석하기 02-2. /scrum/ScrumsView.swift

Big Idea (큰 주제)- 코드분석Essential Question (핵심 질문)- Scrumdinger 에서 해당 코드를 쓴 이유에 대해 나는 잘 이해하고 있을까?Challenge (도전 과제)- 하나의 뷰에서 내가 모르는 코드에 대해 분석해보자 Activities (학습 활동)다시...🥹또 시간 조절을 못하고 있다. 일단 정리!! import SwiftUIimport SwiftDatastruct ScrumsView: View { @Query(sort: \DailyScrum.title) private var scrums: [DailyScrum] @State private var isPresentingNewScrumView = false var body: some View..

iOS/App 2025.04.17

Scrumdinger 분석하기 02-1. /scrum/ScrumsView.swift

Big Idea (큰 주제)- 코드분석Essential Question (핵심 질문)- Scrumdinger 에서 해당 코드를 쓴 이유에 대해 나는 잘 이해하고 있을까?Challenge (도전 과제)- 하나의 뷰에서 내가 모르는 코드에 대해 분석해보자 Activities (학습 활동) 이번에 할 파일은 ScrumsView 이다. import SwiftUIimport SwiftDatastruct ScrumsView: View { @Query(sort: \DailyScrum.title) private var scrums: [DailyScrum] @State private var isPresentingNewScrumView = false var body: some View { ..

iOS/App 2025.04.15

Scrumdinger 분석하기 01. /scrum/CardView.swift

Big Idea (큰 주제)- 코드분석Essential Question (핵심 질문)- Scrumdinger 에서 해당 코드를 쓴 이유에 대해 나는 잘 이해하고 있을까?Challenge (도전 과제)- 하나의 뷰에서 내가 모르는 코드에 대해 분석해보자 Activities (학습 활동) 완성된 코드를 전체적으로 모두 뜯어볼 생각이다. 전체 코드는 이정도. 파일 별로 정리해볼 것이다. //// CardView.swift// Scrumdinger//// Created by taeni on 3/31/25.//import SwiftUIstruct CardView: View { let scrum: DailyScrum var body: some View { VStack(ali..

iOS/App 2025.04.14

View에서 parameter를 선언할때 var, let 선택 기준

var, let 은 Swift 든 어떤 프로그래밍 언어에서든 제일 처음 배우게 된다.변수, 상수 let은 값이 절대 바뀌지 않고var은 값이 바뀔 수 있다. View 에서 다른 View 로 전달을 받을 때, 어떤 View에서는 let으로 받고, 또 어떤 View에서는 var 로 받는다. 어떤 기준으로 선택해야할까? 일단 구체적으로 해당 받은 화면에서 값이 바뀌지 않을 경우에는 let을 1순위로 선택해야한다. struct MySampleView: View { let title: String var body: some View { Text(title) }} View는 struct이기 때문에, 변경이 일어나면 새로 그리는 방식이므로 값이 내부에서 바뀔 경우에는 var를 선..

iOS/Swift 2025.04.13

Scrumdinger 개발 10 : Recording audio

SwiftUI의 상태 관리(state management) 와생명 주기(life cycle) 기능을 활용해 데이터 흐름(data flow) 을 구현해본다.  ScrumTimer 가 변경됨에 따라 MeetingView 에서 각 View 들에게 어떻게 처리하는지를 알아본다.  보면 ScrumTimer @Observable의 변동에 대한 알림은 MeetingView 만 받는다.MeetingView 에서 @State 가 변경 됨에 따라 각 뷰들을 자동으로 변화되기 때문이다.   그리고 SpeechRecognizer 는 마이크에 접근해 오디오를 캡처한 후, 들리는 음성을 텍스트로 작성한다.이 또한 @Observable 매크로를 적용한다.@State를 사용하면 회의 뷰 안에서 음성 인식기의 단일 인스턴스를 생성할 ..

iOS/App 2025.04.10
728x90