게시글
질문&답변
콘솔창에 값이 안찍히고 있습니다.
안녕하세요원래 콘솔에 잘 뜨셨다면, xcode를 다시 재실행해보시겠어요?그래도 안되면, preview에서만 입력하지 말고 재생 버튼 눌러서 앱을 실제로 구동하고 한번 해보시면 될거에요 그래도 안된다면 말씀해주세요~
- 1
- 2
- 22
질문&답변
SwiftUI main actor 관한 경고 계속 뜹니다.
안녕하세요 랑프님해당 뷰모델이 항상 메인액터위에서 돌아야한다는 말인데요클래스명 위에 @MainActor(사진참조)처럼 달아주시면 에러가 사라질 거에요~(사진)
- 1
- 2
- 42
질문&답변
45강의 에서 Kingfisher 사용후 발생하는 swift6 이슈
안녕하세요 랑프님이 부분은 아마 KingFisher문제인거 같습니다.최근에 swift6관련해서 쓰레드 문제가 많이 일어나고 있는데요.킹피셔가 대응해서 추후에 업데이트 된다면 괜찮아 질거 같습니다~
- 1
- 2
- 35
질문&답변
ViewModel과 Model 구분 (30강)
안녕하세요 kut7728님답변이 좀 늦어졌습니다. 죄송합니다. ㅜㅜ죄송한데 제가 질문을 정확히 이해하지 못한거 같은데요혹시 답변이 미비하다면 다시 질문 부탁드릴게요. 스위프트에서 커스텀 타입을 만드는 방법은 클래스, 스트럭트가 있습니다.모델, 뷰모델 다 이걸 이용해서 만들고요.말씀하신대로 비즈니스 로직을 담고 있는 뷰모델은 보통 클래스로 만들고요.모델의 경우에는 스트럭트로 만드는 경우가 대부분입니다. 간혹 모델을 클래스로 만드는 특수한 경우가 있기도 합니다만 그렇게 흔하지는 않은거 같습니다. 새해 복 많이 받으세요!
- 1
- 2
- 29
질문&답변
바인딩하는 이유
안녕하세요 최지한님!회사일이 바빠 답변이 좀 늦었습니다. ㅜㅜ 죄송합니다.두 뷰를 하나의 데이터로 표현하기 위해 그렇습니다.프로필뷰모델을 각각 생성하면, 한쪽에서는 수정했는데, 다른한쪽에서는 수정이 안되는경우가 있을 수 있거든요.그래서 하나의 뷰모델로 같이 사용하기 위해 바인딩을 하였습니다. 새해 복 많이 받으세요~!
- 1
- 2
- 24
질문&답변
40. 강에서 정상작동 안합니다.
안녕하세요 랑프님해당 문제 원인을 찾았습니다. ContentView파일에 if AuthManager.shared.currentAuthUser == nil {이렇게 currentAuthUser로 로그인을 판단하던 부분을 if AuthManager.shared.currentUser == nil {이렇게 바꿔주세요 이게 로그인할 때currentAuthUser가 세팅되고 그 후에 currentUser가 세팅되는데그 사이에 profileViewModel이 세팅되어서 빈값들이 화면에 세팅되는거 같습니다. 비슷한 문제를 56강에서 같은 해결법으로 수정하는데요. 그 강의도 참고 부탁드리겠습니다.xcode 15에서는 발생하지 않았는데 xcode 16에서 나타난 문제 같아요관련해서 강의 다시 찍어서 업로드 하도록 하겠습니다. 감사합니다!
- 0
- 3
- 75
질문&답변
19강에서 Encoder()를 사용할 수 없습니다.
안녕하세요 최지한님!혹시 해당 에러가 나는 코드에 import가 어떤게 되어있나요?import FirebaseFirestore이 코드를 상단에 추가해보시겠어요?
- 1
- 2
- 42
질문&답변
40. 강에서 정상작동 안합니다.
안녕하세요 랑프님!제보 감사드립니다.확인해서 답변드리도록 하겠습니다~
- 0
- 3
- 75
질문&답변
@Environment 질문 있습니다.
안녕하세요 줄리님!강의 들어주셔서 감사합니다!강의평도 달아주셔서 정말 감사드립니다~! :D 역슬래시 좀 어려운 문법인데요스위프트의 keyPath라는 문법입니다.스트럭트나 클래스의 프로퍼티명을 인자로 넘기고 싶을때 사용해요import Foundation struct Person { let name: String let address: String } func printProperty(of person: Person, keyPath: KeyPath) { let propertyValue = person[keyPath: keyPath] print("\(keyPath) : \(propertyValue)") } // 사용 예시 let person = Person(name: "Alice", address: "123 Apple St") printProperty(of: person, keyPath: \Person.name) // 출력: name : Alice printProperty(of: person, keyPath: \Person.address) // 출력: address : 123 Apple St // 출력: Name: Alice위의 예제를 보면 printProperty이 두가지 인자를 받고 있는데요person은 출력의 구조체명keyPath는 person의 무엇을 출력할지를 인자로 받습니다.여기서는 \Person.name이나 \Person.address를 받을 수 있는데요이렇게 구조체나 클래스의 프로퍼티 자체를 인자로 받을 때 키패스를 사용합니다. 제 강의 에서는 @Environment(\.colorScheme) 이런식으로 사용했는데요여기서는 @Environment()가 EnvironmentValues의 프로퍼티를 받는데요. 그걸 조회하기 위해 이 키패스를 받게 됩니다.다시 말하면앱의 environment정보들을 EnvironmentValues에 프로퍼티들로 저장되어 있고예를 들어 다음과 같은 정보들이 저장되어 있습니다.예시)EnvironmentValues.colorScheme = "다크 모드 or 라이트 모드"EnvironmentValues.locale = "ko_KR" (지역정보)...이런 정보들이 저장되어 있고 이걸 가져오기위해@Environment()가 키패스를 인자로 받게 됩니다
- 1
- 1
- 21
질문&답변
todo 앱에서 미리 적어놨던 요소들은 왜 안나오나요?
안녕하세요 kut7728님 먼저 강의 구매해 주셔서 감사드립니다! ㅎㅎ제가 코드와 강의를 다시 보니 kut7728님처럼 생각할 수 밖에 만들어 놓은거 같아요SwiftData로 바꾸면서 그부분을 그냥 빈배열로 만들어놓으면 좀더 좋았을거 같네요 ㅎㅎ 이유를 설명드리면 이제 todoList를 SwiftData가 관리하게 되는데 배열로 선언된 3개의 요소는 SwiftData에 넣어놓지 않아서 무시되서 그렇습니다.SwiftData에 넣으려면 modelContext를 이용해서 insert해서 넣어야 하는데요. 그렇지 않고 저렇게 배열로만 넣어놓으면 처음에는 값이 3개가 있을수 있지만 어차피 나중에 SwiftData에서 데이터를 조회하기 때문에SwiftData에 저장된 데이터만 나오기 때문입니다. 처음에 우리가 modelContext에 insert한 데이터가 아무것도 없기때문에 todo가 화면에 하나도 안 나오는것입니다.감사합니다~!
- 1
- 2
- 56