묻고 답해요
135만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
@Bindable VS @Environment + @Bindable
안녕하세요. 강의 잘 듣고 있습니다.첫번째 질문.다름이 아니라, 처음에 회원가입 기능을 구현할 때, ViewModel을 @Observable을 통해 관찰 가능한 상태로 두고, ViewModel을 다루는 가장 상위 View인 ContentView에서 @State로 선언하는 것까지는 이해가 됩니다.ContentView의 하위 뷰들 중에서,로그인과 관련한 뷰는Login - EnterEmail - EnterPassword - EnterName - EnterUserName - Complete인데,강사님께서 코드로 작성해주신 간접적으로 접근하는 방법 말고, @Environment(SignupViewModel.self) var signupViewModel var body: some View { @Bindable var signupViewModel = signupViewModel 처음 설명해주신 직접적인 접근 방식을 활용했습니다.@Bindable var signupViewModel: SignupViewModel var body: some View{와 같이, ViewModel에 read-write가 가능하기 위해 @Bindable을 사용한다는 사실은 알고 있습니다.하지만 문제는 아래와 같이 입력한 결과에 대해서 출력도 잘 하는데, @Bindable을 적용하였을 때, 마지막 CompleteView에서 아래의 완료 버튼을 눌렀을 때 MainTabView으로 넘어가지 않은 문제가 생겼습니다.기존Auth.auth().currentUser 을 사용했을 때, swiftUI에서 변화를 감지 못하기 때문에, 알려주신대로 ViewModel 내부에서 var currentUserSession: FirebaseAuth.User? 프로퍼티를 만들어 했는데.. 왜 이러한 문제점이 생기는걸까요?if signupViewModel.currentUserSession != nil{ MainTabView() } else { LoginView() .environment(signupViewModel) }물론, 강사님이 알려주신 방법대로 하면 잘 넘어갑니다 ^^.두 번째 질문간접적인 방법 .environment를 사용했을 때, 오류가 떠서 CANVAS를 끄고 작업을 하셨는데 오류를 없앨수 있는 방법이 있을까요?1) 최상단 InstagramCloneApp에 ViewModel을 적용?2) environment로 설정되는 모든 뷰의 #Preview에 .enivronment() 적용?긴 글 읽어주셔서 감사합니다 😃 답변 기다리겠습니다.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
17강 firebase로 이미지 업로드하기에서 업로드가 안됩니다~
선생님! 캡쳐사진 공유드립니다!!
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
17강 firebase로 이미지 업로드하기에서 업로드가 안됩니다~
Thread 9: Fatal error: Unexpectedly found nil while unwrapping an Optional value위와같은 오류가 뜨면서,,, 업로드가 안됩니다..
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
질문합니다. 섹션 4 - 10 [투두 삭제기능 구현하기(onDelete)]
완전 초보이다보니 궁금증이 생겨서요.투두 타이틀 반복문 쓸땐 List { } 안에서 todoList 의 타이틀들을 반복할땐 Foreach 쓰시고, .onDelete에선 for _ in을 쓰셨는데 서로 적용할 조건이 다른건가요???
-
해결됨SwiftUI의 Property Wrapper(@State, @Binding...)
@State 관련 질문입니다
//정상 작동 하지 않는 코드 import SwiftUI struct MiniView: View { @State var numb: Int var body: some View { Text("\(numb)") .padding() } } struct ContentView: View { @State var number: Int = 0 var body: some View { VStack { Text("\(number)") } Button(action: { number += 1 }, label: { number%2 == 0 ? Text("짝") : Text("홀") }) MiniView(numb: number) } } #Preview { ContentView() }위의 코드는 작동하지 않습니다. 하지만 여기서MiniView 아래 numb 변수의 @State 를 지워주면정상 작동합니다. (아래코드) 이유가 뭘까요.. ㅜㅠ ?? //정상 작동 하는 코드 import SwiftUI struct MiniView: View { var numb: Int var body: some View { Text("\(numb)") .padding() } } struct ContentView: View { @State var number: Int = 0 var body: some View { VStack { Text("\(number)") } Button(action: { number += 1 }, label: { number%2 == 0 ? Text("짝") : Text("홀") }) MiniView(numb: number) } } #Preview { ContentView() }
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
섹션4-4 'NavigationStack' 오류가 납니다
'NavigationStack' is only available in iOS 16.0 or newer라고 뜹니다
-
미해결[Lv.2] 레벨업 - SwiftUI intermediate with Core Data
5월 업데이트 예정이었던 , iOS17 컨텐츠 SwifData 업데이트 언제 되나요 ?
SwiftData - iOS 17 (24년 5월 중 업데이트 예정)
-
미해결[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
GalleryView 작성시, @State? @Bidnable? 의 차이점이 뭔지 궁금합니다.
IOS17로 업데이트 됨에 따라,@Observable 매크로를 활용하여 ViewModel을 활용하면,상태 변화를 감지하여 'View에서 자동적으로 업데이트 된다.'라고 알고 있습니다. @Observable 매크로를 사용해서 코드를 업데이트하던 중 궁금증이 생겨 질문을 남겨봅니다. ContentView, VideoView에서 AnimalViewModel의 인스턴스를 갖고 있을 때, var로 정의했을 때와 let으로 정의를 했을 때의 차이점이 있을까요?struct ContentView: View { // let이나 var이나 상관없는가? let vm: AnimalViewModel var body: some View { NavigationStack{ List{ // 1. Cover Image - hero Image CoverImageView(vm: vm)관련내용을 공부하다보니, 해당 링크에서https://www.donnywals.com/comparing-observable-to-observableobjects/"Defining an @Observable as a let property" 부분에HomeView에서 ViewModel에 @State 프로퍼티 래퍼를 사용한 후 let을 사용한다? 라는 내용을 본적이 있습니다. GalleryView에서 @State 프로퍼티 래퍼와 @Bindable 프로퍼티 래퍼를 사용했을 때의 차이점이 뭘까요 ㅠㅠ . 우선, @State로 했을 때는 변화의 감지를 HomeView에서도 GalleryView에서도 잘 작동하여, 슬라이더를 변화시켰을 때 Grid의 개수가 바뀝니다. 하지만 @Bindable 프로퍼티 래퍼를 사용했을 때에는 GalleryView에서만 슬라이더 변화를 감지 하고, HomeView에서는 변화를 감지하지 못하는 상황이 벌어집니다. @State var vm: AnimalViewModel@Bindable var vm: AnimalViewModelstruct GallaryView: View { @State var vm: AnimalViewModel var body: some View { NavigationStack{ ScrollView(.vertical, showsIndicators: false){ VStack(spacing: 30){ // 1. Image Image(vm.selectedAnimal) .resizable() .scaledToFill() .frame(width: 250, height: 250) .clipShape(Circle()) .overlay(Circle().stroke(Color.accentColor, lineWidth: 5)) // 2. Slider Slider(value: $vm.gridColumn, in: 2...4, step: 1) .padding(0) .onChange(of: vm.gridColumn) { withAnimation(Animation.easeInOut(duration: 1.0)){ vm.gridSwitch() } } // 3. Grid LazyVGrid(columns: vm.gridLayout, spacing: 20){ ForEach(vm.animals){ animal in Image(animal.image) .resizable() .scaledToFill() .frame(width: 80, height: 80) .clipShape(Circle()) .overlay(Circle().stroke(Color.white, lineWidth: 1)) .onTapGesture { withAnimation(Animation.spring()){ vm.selectedAnimal = animal.image } } } } } //:VSTACK .padding() } //:SCROLL .navigationTitle("갤러리") .navigationBarTitleDisplayMode(.inline) } //:NAVIGATION } } 추가로,@Observable 매크로를 이용한 예시가 잘 정리되어 있는 문서들이 있을까요?? 제가 잘 이해를 못한 건지, 이 부분이 너무 어렵네요. 감사합니다 😀
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
릴스 기능 문의
강의에 릴스 페이지에 대한 기능은 업데이트 되지 않는건가요???
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
init 함수가 없는 구조체에 인자가 들어갈 수 있는 이유가 궁금합니다.
"ProfileView(viewModel: ProfileViewModel(user: user))"ProfileView에는 init함수가 존재하지 않지만viewModel을 인자로 받아서 생성자를 호출할 수 있는 이유가 무엇인지 궁금합니다.viewModel에 @state를 사용했기 때문일까요?"구조체에 @state변수가 있다면 해당 구조체를 새로 만들 때 인자로 부여할 수 있다."이렇게 이해하면 될까요?? @state에 대해 설명부탁드립니다
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
NewPostViewModel.swift 생성후 오류 질문
NewPostViewModel.swift 파일에서 @Observable에 Unknown attribute 'Observable' 이런 오류가 발생합니다...찾아보니 ios버전이 17이하버전에서는 Observable을 사용할 수 없다고하는데, 제가 지금 16.4버전을 사용중에 있습니다. 버전을 업그레이드하려는데, 이 부분도 해결이 되지 않아서 그러는데, 어떻게 해야할까요?
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
강의를 들으면서 앱을 만들어보고 있습니다
chat gpt API를 활용해서 간단한 앱을 만들어보려고 하는데 API를 어떻게 써야할지 감이 잘 오지 않습니다.혹시 괜찮으시다면 관련된 자료나 예시를 알 수 있을까요?
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
섹션2.끝말잇기앱 질문 - textfield 입력 변수 수정 방법
끝말잇기 앱을 만들다가 궁금증이 생겼습니다.textfield 로 입력 받은 문자열을 수정해서 사용하고 싶을 때(예: 사용자가 소문자로 입력한 영문자를 모두 대문자로 바꾸고 싶을 때)어떻게 할 수 있나요? 입력받은 값을 저장한 변수를 건드리면 에러가 뜹니다. 즉,nextWord = nextWord + "수정 더함"해도 에러가 나고다른 변수에 대입한 후 그 변수를 바꾸려 해도 (nextWord2 = nextWord + "수정") 에러가 납니다.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
선생님 12강 mvc 코드 실습 강의 내용 영상이 짤린건가요?
시작 부분이 뭔가 짤린 거 같습니다..?? 흐름을 따라갈 수 없어요 ㅜㅠㅜ
-
미해결[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
페이지 이동에 관해 질문이 있습니다 !
안녕하세요 강의 너무 잘 듣고 있습니다 ! 예전에 앱 만들다가 궁금했던 것이 두가지 정도 있어 여쭤보려고 합니다. 페이지 페이지 가 연결되는 느낌이 아니라 아예 다른 페이지로 넘어가고 싶은데,Tab, NavigationLink 말고 다른 방법이 있을까요? 보통 이럴 때는 그냥 NavigationLink 로 이동시키고 hidden을 false를 주는건가요? 그리고 페이지 내 컴포넌트 안에 있는 컴포넌트에서 버튼을 눌렀을 때 Sheet이 올라오게 하고 싶은데 그럴 때 Sheet의 전체 크기가 전체 화면 기준이 아니라 그 컴포넌트가 기준이 되어 작게 나타났을 때가 있었습니다.이런 경우에는 어떻게 해결하나요? 답변해주시면 감사하겠습니다.
-
미해결[Lv.2] 레벨업 - SwiftUI intermediate with Core Data
Spacer() 를 넣으니 예제처럼 SafeArea 확보가 안됩니다.
struct MatchedGemomatryEffectInter: View { @State private var isToogle: Bool = false var body: some View { VStack { RoundedRectangle(cornerRadius: 20) .frame(width: 100, height: 100) .offset(y: isToogle ? UIScreen.main.bounds.height * 0.7 : 0) Spacer() } .frame(maxWidth: .infinity,maxHeight: .infinity) .background(.green) .onTapGesture { withAnimation(.spring()) { isToogle.toggle() } } } }안녕하세요.동일하게 작성했는데 저는 상하 safeArea 가 채워진체나옵니다. 타겟은 iOS15 입니다. 강의 관련된 질문은 언제나 환영입니다 😄코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요)마크다운을 사용해서 편리하게 글을 작성하세요먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
-
미해결[Lv.2] 레벨업 - SwiftUI intermediate with Core Data
Local Notification 예제 문의
예제를 전부 구현한 상태에서아래 코드를 통해서 뱃지 숫자를 1씩 올려서 보내게되어 있습니다. func scheduleNotification() { //notification 내용 설정 let content = UNMutableNotificationContent() content.title = "Local Notification 테스트 1" content.subtitle = "앱 알람 테스트 중입니다." content.sound = .default content.badge = NSNumber(value: UIApplication.shared.applicationIconBadgeNumber + 1)하지만 아래 코드에 의해 뱃지가 0 으로 리셋되기에항상 1만 발송하게 됩니다..onChange(of: scenePhase) { newValue in if newValue == .active { UIApplication.shared.applicationIconBadgeNumber = 0 } }추가적으로 5초 딜레이로 설정후 로컬노티 여러번 누른후에앱을 종료하고 기다리면 노티가 여러개 오지만모두 뱃지 1로 오기 때문에 앱아이콘에 뱃지는 1로 계속옵니다. 실무에서 로컬노티에 카운터를 현재 뱃지 카운터에 + 1 해서보내는건 실효성이 없어보이는데요. 따로 해결할 방법이 있을까요 ? 조언 부탁드립니다. 강의 관련된 질문은 언제나 환영입니다 😄코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요)마크다운을 사용해서 편리하게 글을 작성하세요먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
-
미해결[Lv.2] 레벨업 - SwiftUI intermediate with Core Data
Local Notification 강의 편집오류 있어요
17:29 부분에서 변수명 scenePhase 타이핑중 sce 까지만 타이핑 하고 바로 화면 이동 됩니다.컷 편집 잘못된거 같아요. 강의 관련된 질문은 언제나 환영입니다 😄코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요)마크다운을 사용해서 편리하게 글을 작성하세요먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
-
미해결[Lv.2] 레벨업 - SwiftUI intermediate with Core Data
강의중 코드폴딩 단축키 (커맨트+옵션+왼쪽방향키)
강의 중 함수내 코드폴딩 단축키는커맨드 + 옵션 + 왼쪽 방향키 입니다.Sorted,Filter,Map 강의 8:14 에커맨드 + 쉬프트 + 왼쪽 방향키로설명 되어 있어서 있어서 혼동 했네요. 강의 관련된 질문은 언제나 환영입니다 😄코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요)마크다운을 사용해서 편리하게 글을 작성하세요먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
-
미해결[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
scrollTransition 에서 phase 값을 찍어보고 싶습니다.
안녕하세요..scrollTransition 에서phase 값을 실시간으로 확인해 보고 싶습니다.swiftUI 에서 print 를 통해 콘솔에 디버깅 하고싶은데 어떻게 하면 좋을까요 ? 강의 관련된 질문은 언제나 환영입니다 😄코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요)마크다운을 사용해서 편리하게 글을 작성하세요먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요