묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
서적 추천 부탁드립니다!
안녕하세요! 이제 막 섹션 0을 수강 완료한 수강생입니다 다름이 아니라 강의랑 함께 볼만한 내용의 서적이 있는지 궁금해서 글을 남기게 되었습니다. 제가 개인적으로 강의 내용들을 책에다가 정리하면서 공부하는 타입이라서 혹시 강의해주시는 내용과 비슷한 서적 추천해주실만한 거 있으시면 추천 부탁드리겠습니다. 좋은 강의 만들어주셔서 감사합니다! 남은 강의도 성실하게 수강하겠습니다 ㅎㅎ
-
미해결Swift 언어로 배우는 iOS 벽돌깨기 게임
class 문법 질문입니다
class Test{ var age = 100 var name = "배트맨" func simpleFunction(){ print("안녕하세요 저는 \(name)입니다. 저는 \(age)살임") } init(){ simpleFunction() print("부모 클래스 init") } } class Test1: Test{ override func simpleFunction(){ print("자식 클래스") } } let test1 = Test1() test1.simpleFunction()자식 클래스 부모 클래스 init 자식 클래스 위와 같은 상황입니다 일단 Test1에 init 메서드가 없으니 컴파일러가 자동으로 init(){ super.init() }을 생성하겠죠 그럼 부모 클래스의 init을 호출할 거고 부모 클래스의 init에는 simpleFunction 메서드 호출 구문이 있으니 호출하겠죠 근데 분명 부모 클래스 내에서 호출했는데 왜 재정의된 simpleFunction 메서드의 내용이 호출됐는지 이해가 되질 않습니다 구글링이랑 gpt 이용해서 알아 보니 재정이된 메서드는 부모 클래스에서 호출하더라도 재정의된 내용이 호출된다는데 이 말대로라면super.simpleFunction를 이용해서 메서드를 호출한다고 하더라도 재정의 됐으니 재정의된 내용이 출력되어야 할텐데 super를 이용한 호출은 또 재정의 되기 전 내용이 출력됩니다. 호출 기준이 너무 헷갈리는데 이 부분에 대해서 알려주시면 감사하겠습니다!
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
질문합니다. 섹션 4 - 10 [투두 삭제기능 구현하기(onDelete)]
완전 초보이다보니 궁금증이 생겨서요.투두 타이틀 반복문 쓸땐 List { } 안에서 todoList 의 타이틀들을 반복할땐 Foreach 쓰시고, .onDelete에선 for _ in을 쓰셨는데 서로 적용할 조건이 다른건가요???
-
미해결앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해
수업자료 markup 에 대해 궁금합니다!
좀 샛길로 샌거 같지만... 이런 질문에도 답변해주신다면 너무 감사합니다ㅠㅠ//: 로 마크업 다시는거 혹시 수정은 어떻게 하는지 알 수 있을까요..? 수업자료로 코드 주신걸 보다가 궁금해졌는데요. 한줄로 마크업 다는거는 //: 이렇게 하니까 달아지던데, 저는 xcode에서 바로 적용이 되더라고요. https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_markup_formatting_ref/AddingMarkup.html#//apple_ref/doc/uid/TP40016497-CH100-SW1이 문서 보니까 markup in source editor 랑 rendered documentation mode 에서 다르게 보여지는거 같은데...이건또 어떻게 설정하는지도 모르겠고요ㅠㅠㅠ
-
해결됨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() }
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
75강 api 추출할때 질문있습니다 !
jazz라는 분야를 얻기위해서 api를 호출하는건데 , 계속 실행해보면 현재 term=" " 에 입력을 하게 되면 , jazz라는 분야가 아닌 아티스트 이름으로 결과값이 나오고 있습니다. 1~2시간동안 이 문제를 해결하려고 노력했는데 term은 필수적인 사항이라서 뺄수도 없고 , term에 어떤 값을 넣어도 동일한 아티스트 이름이 나와서 강의를 따라갈 수 없습니다 ㅠ
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
테이블 뷰 관련 질문있습니다!
안녕하세요. 앨런님.테이블 뷰를 사용하던 중 고민이있어 질문드립니다.현재 테이블 뷰의 높이를 정적으로 선언하는 방식이 아닌,테이블 뷰의 셀의 수와 높이를 계산하여 동적으로 내부 컨텐츠 사이즈에 따른 테이블 뷰의 높이를 설정하고 싶습니다.우선 저의 코드에서는 뷰의 계층 구조는 최상위부터스크롤뷰 -> 스택뷰 -> 테이블 뷰로 스크롤이 가능하게 구성을 했습니다.스택뷰의 높이를 내부 컨텐츠 크기에 자동으로 맞추고, 스택뷰의 바텀 제약에 맞춰 스크롤 뷰의 사이즈가 정해지는 방식입니다.더 좋은 방식이 있다면 조언 부탁드립니다. 감사합니다추가.테이블 뷰 셀의 수에 맞춰서 테이블 뷰의 높이를 지정하는 것 까지 해결했습니다.하지만 테이블 뷰 셀의 크기를 UITableView.automaticDimension로 했을 경우 셀의 크기가 잘리는 현상이 발생합니다.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
섹션4-4 'NavigationStack' 오류가 납니다
'NavigationStack' is only available in iOS 16.0 or newer라고 뜹니다
-
미해결[Lv.2] SwiftUI 중급 - Core Data와 SwiftData로 앱 완성하기
5월 업데이트 예정이었던 , iOS17 컨텐츠 SwifData 업데이트 언제 되나요 ?
SwiftData - iOS 17 (24년 5월 중 업데이트 예정)
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용앱 64강에서 초기 설정에 관한 질문입니다.
안녕하세요 앨런님제가 이전강의를 볼때부터 질문드리고 싶었는데요 앱 설정에서 아이패드는 체크를 안하고 싶은데요 새로 업데이트된 xcode에서 그것이 안되는데 어떻게 하면 좋나요?
-
미해결[Lv.1] iOS 17 앱 개발 기초 - SwiftUI로 시작하기
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 매크로를 이용한 예시가 잘 정리되어 있는 문서들이 있을까요?? 제가 잘 이해를 못한 건지, 이 부분이 너무 어렵네요. 감사합니다 😀
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
강의를 들으면서 앱을 만들어보고 있습니다
chat gpt API를 활용해서 간단한 앱을 만들어보려고 하는데 API를 어떻게 써야할지 감이 잘 오지 않습니다.혹시 괜찮으시다면 관련된 자료나 예시를 알 수 있을까요?
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
섹션2.끝말잇기앱 질문 - textfield 입력 변수 수정 방법
끝말잇기 앱을 만들다가 궁금증이 생겼습니다.textfield 로 입력 받은 문자열을 수정해서 사용하고 싶을 때(예: 사용자가 소문자로 입력한 영문자를 모두 대문자로 바꾸고 싶을 때)어떻게 할 수 있나요? 입력받은 값을 저장한 변수를 건드리면 에러가 뜹니다. 즉,nextWord = nextWord + "수정 더함"해도 에러가 나고다른 변수에 대입한 후 그 변수를 바꾸려 해도 (nextWord2 = nextWord + "수정") 에러가 납니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용앱 59강에 관한 질문입니다
앨런님,안녕하세요 제가 코드로 설명해주신 것과 스토리보드로 한 것을 비교를 해보니까요 DetailViewController에서 구현된것에서 코드에서 말한 것과 다르게 numberofline=0이것이 없어서 그런지 여러줄로 표현이 안되서요 그래서 제가 좀더 스토리보드쪽에 보니까 numberofline이 있더라구요 그것에 0으로 해도 description에서 여러줄로 표현이 안되는데요 어떻게 하면 스토리보드로 구현한 Detailviewcontroller에서 description을 여러줄로 표현할수 있을까요?
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용-3 앱 /코드로 UI 짜기 영상에서 문의 드립니다.
영상 11분 20초 경 lazy var를 이용해 view.addSubview(emailTextFieldView)를 사용할 수 있다고 하셨는데 이 부분이 UIViewController의 view를 카리키는것이 아닌 클로저 내부에서 이미 선언한 let view = UIView()의 변수 아닌가요? 해당 코드가 왜 정상적으로 동작하는지 영상이 잘못된거 같은데요. 제가 잘못 이해하고 있다면 다시 설명 부탁드립니다.
-
미해결Apple 출신 개발자의 SwiftUI Basic Part 1 기초튼튼
파트2 개강 예정시기
안녕하세요, 혹시 파트2 개강 예정시기를 대략적으로 알 수 있을까요?
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Api관련 질문있습니다!
안녕하세요. 강의를 수강하면서 프로젝트로 앱을 하나 만들어 보려고 합니다.우선 Node를 사용하여 서버를 만들었습니다.카카오 맵이나 구글 api를 요청받아 지도상에 출발지와 목적지 위치를 입력받고 이동경로를 표시하고자 하는데,문제는 api요청을 서버에서 하고 앱으로 전달할 지 아니면 앱에서 직접 api를 요청하여 바로 사용할 지 고민입니다. 후자의 경우 앱이 무거워질 수도 있는 게 아니냐는 백엔드 측의 의견이 나왔습니다.항상 강의 도움을 많이 받고 있습니다. 감사합니다.
-
미해결최신 SwiftUI와 UIKit과 함께하는 올인원 iOS 앱 개발 강의
xcode15 프리부 2개로 안보여요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 2개로 안되고 뭘해도 저렇게 합쳐져요
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
closure 3 에서 weak로 준 부분이 궁금합니다.
안녕하세요.레퍼런스 변수의 경우 레퍼런스 카운터에 의해 메모리에서 해제 되는 시점을 확인 한다고 이해 했는데요.캡쳐 리스트에서 weak self 를 사용 할 경우 레퍼런스 카운터가 증가하지 않게 되고그래서 클로저 변수를 메모리에서 해제 하지 않아도 결국 클래스의 deinit이 호출되는것을 확인 하였습니다.그렇다면 weak를 사용해 캡쳐 된 레퍼런스 변수들은 메모리에 그대로 남아 있는건가요?아니면 클래스인스턴스에서 레퍼런스 카운터가 0이 될 때 메모리에서 weak로 참조된 변수들도 같이 해제 되는건지 궁금합니다.
-
미해결
Closure 실전 세번째 설명 질문입니다.
강의을 수강하면서 아래의 함수를 사용하려고 하는데 if name.contains 구문에서아래와 같은 오류가 발생됩니다.let names = ["apple", "air", "brown", "red", "orange", "blue", "candy"] func someFind(find: String) -> [String] { var newNames = [String]() for name in names { if name.contains(find) { newNames.append(name) } } return newNames } Cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')강의에서는 잘 되는데, 제가 선언해서 저 함수를 쓰려고할때 발생되는 에러 메세지인데..String에서는 Charater Type밖에 찾을 수 없다고 합니다. 왜 강사님 코드는 되고 저는 안되는것인가요..?문자열 배열에서 검색한번 해보려고 하는데 오류가 발생되는데... 왜 이런 오류가 발생되는것인가요. ㅠㅠ