묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨토스(前) 엔지니어가 알려주는 iOS 입문 - Swift언어부터 샘플앱까지
2.1 프로그래밍 소개 14:06 let ints 질문
안녕하세요 오늘도 수업 잘 듣고 갑니다.질문이 있습니다.2.1 프로그래밍 개념소개, 14:06 29번줄 부분에 Array 데이터 타입 선언할 때 let ints = [1,2,3,4] 라고 작성하셨는데, int 랑 ints의 차이가 뭐죠? 왜 여기서는 ints를 사용해야하는 건가요? 14:08 부분에 강사님께서 "보면 ints 라는 Array 데이터 타입으로..." 라고 언급하셔서 조금 더 헷갈리는 부분이 있습니다.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
todo 앱에서 미리 적어놨던 요소들은 왜 안나오나요?
안녕하세요! 강의 너무 잘 듣고 있습니다.todo앱 프로젝트 후반부 swiftdata 적용 실습때시뮬레이터를 돌려보는데 분명 코드에서는 todoList변수에 Todo 객체 3개를 넣어놓았는데 실행할때는 리스트에 안뜨더라구요. 왜 기존에 넣어놨던 todo들은 리스트에 안뜨는건지 너무 궁금합니다!
-
해결됨토스(前) 엔지니어가 알려주는 iOS 입문 - Swift언어부터 샘플앱까지
Main 을 못찾겠어요
안녕하세요, 오늘 처음 수강하게 된 수강생입니다.5:00 즈음에 main의 아이폰 인터페이스를 열고 따라하고 싶은데 제 xcode는 최신버전이라 그런지 main이 없더라구요. 그래서 더 이상 진행하는데 어려움을 겪고 있습니다. 사진 첨부하겠습니다.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
Swift 6 업데이트 이후 Todo 예제 실행 오류
Todo.swift에서 'Cannot expand accessors on variable declared with 'let'; this is an error in the Swift 6 language mode' 오류가 발생합니다!
-
미해결앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해
2) 오퍼레이션큐(OperationQueue) 강의 질문입니다
2) 오퍼레이션큐(OperationQueue) 강의 15분37초 쯤 보면 필터 작업이 다 끝난다음에 append큐를 통해서 배열에 전달을 한다고 말씀하셨어요. 근데 여기 필터하려는 이미지가 5장이잖아요, 5장 모두 필터링 다 끝나고 나면 배열에 들어가는건가요 아니면 ,filterQueue는 기본적으로 동시적으로 동작하면서 각 필터 작업이 끝나는 대로 배열에 넣는건가요? filterQueue.waitUntilAllOperationsAreFinished() 코드 보면 동기(sync)적으로 동작하게 하니까 전자가 맞는거 같아보여요
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
강의 수강 기간 연장 가능할까요?
안녕하세요, 앨런님앨런님 강의 들으면서 iOS 공부를 시작하게 된 수강생입니다!지금은 프로젝트와 면접 준비를 열심히 준비하고 있는데요, 하다보니 기본기가 부족하다는 느낌을 받았습니다.그래서 강의를 다시 들으면서 탄탄하게 기본기를 잡으려고 합니다...수강 기간 연장이 가능할까요,,,,?🥲
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
즐겨찾기 탭에서 페이지네이션 422 서버 에러
안녕하세요, 페이지네이션 부분 오류가 있는 것 같아 질문 드립니다! UserListViewController에서 'bindView()' 메서드에서 페이지네이션을 구현하고 있습니다.강의 내용과 같이 구현하면, 즐겨찾기 유저를 여러 명 추가 후 다시 앱을 실행했을 때, Core Data에 저장된 즐겨찾기 유저 목록은 그대로 표시됩니다. 즐겨찾기 목록 테이블뷰를 맨 밑으로 스크롤 하면 422 서버에러가 발생합니다.테이블뷰의 맨 밑으로 스크롤 하면 바인딩 되어 있던 tableView의 prefetchRows(또는, willDisplayCell)의 코드가 실행되게 되고 fetchMore의 값이 변경되어 fetchUser()가 실행되어 output의 값이 변경되는데, 이때 텍스트필드 값은 비어있기 때문에 데이터를 받아오는 과정에서 422 에러가 발생하는 것이라 예상됩니다. 아래 코드와 같이 row를 받아 올 때, self?.tabButtonView.selectedType.value == .api를 추가하여 selectedType이 api 타입일 때만 fetchMore의 값이 변경되도록 수정하면 422 에러가 발생하지 않습니다.제가 생각한 오류의 원인과 해결 과정이 올바른지 질문드립니다! tableView.rx.willDisplayCell.bind {[weak self] (cell, indexPath) in guard let row = self?.tableView.numberOfRows(inSection: 0), self?.tabButtonView.selectedType.value == .api else {return} if indexPath.item >= row - 1 { self?.fetchMore.accept(()) } }.disposed(by: disposeBag) }
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
NetworkManager의 tokenHeader 관련 질문 드립니다!
안녕하세요, 덤벨로퍼님! 좋은 강의 감사드립니다!덕분에 좋은 코드 많이 보고 배울 수 있었습니다. 복습 중에 API 헤더 관련해서 궁금한 점이 있어 질문드려요. 강의에서는 API에서 필요로 하는 헤더를 NetworkManager 클래스에서 정의하고 사용하고 있습니다. 규모가 있는 앱에서는 API가 많고 서로 다른 헤더를 필요로 할 거라고 예상이 되는데 NetworkManagerProtocol의 'fetchData()' 메서드에서 파라미터로 헤더를 같이 받아오는 것이 효율적인지 궁금합니다. userNetwork의 'fetchUser()' 메서드 내에서 url과 header를 같이 생성하고 networkManager의 메서드 파라미터로 넘겨주는 방법이 괜찮은 방법일까요?
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
[클린 아키텍쳐] 로컬 Json 파싱
안녕하세요! 클린 아키텍쳐 관련 질문있습니다.API 통신이 아니라 로컬에 저장된 json 파일에서 앱 실행시 한번 FileManager로 파싱하고자 하는데, 클린 아키텍쳐 구조로 진행하려면 어떤 구조로 될까요? Domain > Entity 영역에 City 모델을 만든 상태입니다.기능은 크게 2가지로 load하고 search하는 기능이 있습니다. load 한 이후에는 변수를 통해 search하면 되서 search는 뷰 모델에 정의하는게 맞는지, load의 경우 UseCaseProtocol 로 해야하는지 어떤 방식이 적합한지 여쭤봅니다. 추가로 API 통신하는 경우에도 로딩한 후 모델로 가공해서 보여주는 기능만 있는데, 그럴 경우에는 어떻게 진행하는걸 추천하시나요? API 로 선택한 항목에 대한 정보를 로딩하고 데이터 가공해서 UI에 보여주는 경우입니다.. 감사합니다.
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
의존성 주입에 관하여 질문있습니다.
let coredata = UserCoreData(viewContext: appDelegate.persistentContainer.viewContext) let network = UserNetwork(manager: NetworkManager(session: UserSession())) let userRP = UserRepository(coreData: coredata, network: network) // Domain Layer let userUC = UserListUsecase(respository: userRP) let userVM = UserListViewModel(usecase: userUC) // Presentation Layer let userVC = UserListViewController(viewModel: userVM)하나의 뷰 컨트롤러를 생성 시 ViewModel, UseCase, Repository, Network, CoreData 등 주입할 요소가 많아지는 것을 느꼈습니다.그렇다면 화면전환을 수행할 때마다 뷰 컨트롤러를 생성하게 되는데 매번 해당 컨트롤러에 의존성을 주입해주어야 하나요?또한 Network, CoreData 등 동일한 객체를 유지하기 위해서 이전화면의 ViewModel 객체를 다음화면의 ViewModel로 넘겨주면 될까요?궁극적으로 실무에서 사용하는 방식을 알고 싶습니다.
-
해결됨앱 개발 기초부터 실전까지 하나로 끝내는 Swift & iOS 마스터 클래스
Section21 Nework Part1 / JSON
제공해주신 API 호출하면 500에러 반환합니다. 확인 부탁드립니다.
-
미해결앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해
warning 뜸
코드파일의 5번 SerialSyncProject의 WriteSyncronously()를 실행할 경우 SerialSyncProject(9296,0x104550200) malloc: nano zone abandoned due to inability to reserve vm space.현재 이름(write-safe): 재석 유==================WARNING: ThreadSanitizer: data race (pid=9296) Write of size 8 at 0x000108f5f7d0 by thread T8: #0 SerialSyncProject.Person.changeName(firstName: Swift.String, lastName: Swift.String) -> () <null> (SerialSyncProject.debug.dylib:arm64+0xdc98) #1 closure #1 () -> () in SerialSyncProject.WriteSyncPerson.changeName(firstName: Swift.String, lastName: Swift.String) -> () <null> (SerialSyncProject.debug.dylib:arm64+0x105b4) ....기타 경고들....==================현재 이름(write-safe): 구라 김현재 이름(write-safe): 나래 박현재 이름(write-safe): 동엽 신현재 이름(write-safe): 세형 양마지막 이름은?(write-safe): 세형 양이런식으로 경고메세지가 뜨는데 정상인걸까요? - 데이터 레이서 때문에 생기는 현상이어서 그냥 넘겨도 되는건지 궁금합니다!
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
강의 자료는 어디서 받을수 있나요?
강의에 사용되는 자료와 코드들은 어디서 받을 수 있나요?
-
미해결성공적인 진짜 iOS Design Guide - [Autolayout With Code]
안녕하세요! 강의 자료 관련 질문입니다.
section4 UIKit을 다루는 방법의 코드자료는 제공되지 않는 것인가요?
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
안녕하세요 페이지네이션 구현 강의 중 질문있습니다.
다름이 아니고 UserListViewController에서 private func bindView() { tableView.rx.prefetchRows .bind { [weak self] indexpath in guard let rows = self?.tableView.numberOfRows(inSection: 0), let itemIndex = indexpath.first?.item else { return } if itemIndex >= rows - 1 { self?.fetchMore.accept(()) } } .disposed(by: disposeBag) }해당 코드 작성한 것을 확인했는데 이 상황에서 itemIndex >= rows - 1가 정상적으로 동작하지 않는다고 생각이 들어서요.정상적으로 동작하는 경우도 있지만 (천천히 스크롤 할 때) 빠르게 스크롤했을때 rows 는 30이라고 할때 itemIndex는 24가 찍혀 self?.fetchMore.accept(())가 실행이 안되더라구요 그렇다면 prefetchRows를 쓰는게 좋은 방법인가에 대한 생각이 들어서 질문 드립니다!
-
미해결한 조각씩 배우는 SwiftUI - 레벨3
이전 강의와 같이 자막은 제공되지 않나요?
ㅈㄱㄴ
-
해결됨앨런 Swift Concurrency for Swift 6 (Part-1)
강의자료 관련 질문
안녕하세요 엘런님 먼저 정말 좋은 강의 제작 해주셔서 감사합니다.현재 컨커런시 part1을 시작하려고 강의 구매 및 강의 자료를 다운받았는데요part2 역시 강의가 오픈되면 구매할 생각입니다.그런데 그 때는 part2 강의자료만 따로 제공되지는 않을까요??설명을 보니 묶어서 교제로 판매하신다고 하시는데 part2 강의 자료만 필요한데교제까지 구매하면 조금 부담이 될 것 같아사요
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
(기초-3) 가위바위보 앱 만들기 / 코드 설정하기 - 2 (기초 앱 12강)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 주사위만들기 앱에서 viewDidLoad()를 다음과같이 정의하고 RESET 버튼을 눌렀을 때 viewDidLoad()를 호출해도 되나요? 작동은 하는데 비효율적이고 문제가 되는 부분이 있을 것 같은데 궁금합니다. override func viewDidLoad() { super.viewDidLoad() mainLabel.text = "선택하세요" // 1) 첫번째, 두번째 이미지 뷰에 준비 이미지를 띄워야 함 comImageView.image = imageLiteral(resourceName: "ready") myImageView.image = UIImage(named: "ready.png") // 2) 첫번째, 두번째 레이블에 "준비" 라는 문자열을 띄워야 함 comLabel.text = "준비" myLabel.text = "준비" }
-
해결됨iOS Clean Architecture & MVVM: RxSwift 완전 정복
강의 질문있습니다.
질문강의 중 스냅킷을 사용하여 이미지 뷰의 제약을 설정하셨는데make.leading.top.bottom.equalToSuperview().inset(20) make.width.height.equalTo(80).top과 bottom을 상위 뷰에 걸어 상대적 높이를 설정했으나, 절대적 높이 height도 별도로 걸어주신 이유가 있을까요?
-
미해결Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
ToDo 앱 @Observable 기능(?) 질문입니다
안녕하세요 강사님 좋은 강의 잘 수강하고 있습니다!강의에서 @Observable 사용시 큰 설명 없이 넘어가셔서 개인적으로 알아보는 중입니다[SwiftUI] Observable macro를 통해 모델 데이터를 만들고 관리하는 방법 (tistory.com)[SwiftUI] iOS17 이후의 상태 관리 (velog.io)[SwiftUI] @Observable 매크로 (1) (tistory.com)Discover Observation in SwiftUI (feat. WWDC 2023) :: iOYES (tistory.com)등 위의 링크들을 살펴보았지만 초보자인 제가 이해하기엔 어려운 내용들이었습니다그래서 강사님 강의 중 SwiftUI의 Property Wrapper(@State, @Binding...)를 구입해봤지만 아쉽게도 @Observable이 아닌 구 버전의 프로퍼티 래퍼인 @ObservableObject를 설명해주시더라구요(이 부분은 아쉬웠지만 나머지 래퍼들을 공부하는 데에는 정말 좋은 강의라고 생각합니다!)일단 강의의 흐름을 보면 @State와 묶어서 설명하시길래 @State는 변수의 변화를 감지하기 위한 래퍼이고 @Observable은 class나 구조체 내 멤버 프로퍼티 값들이 변경되는 걸 감지하기 위한 래퍼라고 이해했는데 맞게 이해한 걸까요..? 답변 주시면 감사하겠습니다!!좋은 하루 보내세요!