월 44,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
TodoCell UIview 생성 후 연결 시 오류
이 빨간 글씨 오류 때문에 되지 않는데 해결을 어떻게 하나요??
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
테이블 뷰 데이터 업데이트 관련 질문
안녕하세요 강사님! 영상 잘 보고 공부하고 있습니다!영상에서 combine을 사용하여 데이터 바인딩 하셨는데 제가 이해하기로는 @Published가 붙은 데이터가 업데이트 되면 그것을 구독하는 userName3, userAge3 메서드가 호출되고 그래서 테이블 뷰 안에 데이터가 변경되는 것으로 알고있는데 reloadData를 호출하지 않으면 변경이 이루어지지 않습니다. reloadData를 호출하여 테이블 뷰의 변경사항을 업데이트 한다면 굳이 각각의 셀에 데이터를 바인딩 할 필요 없이 셀에서는 배열 안에 데이터를 그냥 가져오고 viewDidLoad안에서 데이터가 변경되면 reloadData를 호출하도록 구현하는 것과 차이점이 있을까요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
TODO List Coredata 질문입니다.
강의중 궁금한것이 있어서 질문 남깁니다.TodoList 엔티티 정의를 했는데. ToDoList 의 클래스를 찾을수 없다고 나옵니다. 어떻게 해야할지 모르겠습니다. 알려주시면 감사하겠습니다.
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
혹시 추가예정인 강의가 대략 언제쯤 나오는지 알수있을까요..?
재차 여쭤봐서 죄송합니다..!
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
swift에서 import 헤더를 안해도 되는이유가 궁금합니다.
보통 다른언어의 경우 다른 클래스파일을 사용할경우 (import 클래스파일) 이런식으로 선언해주어야지만 해당 클래스파일을 사용 할수 있다고 알고있습니다. 그런데 swift의 경우 따로 (import 클래스파일) 을 해주지 않아도 사용이 가능해서 어떤 원리로 작동되는지 궁금합니다.
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
closure 3 에서 weak로 준 부분이 궁금합니다.
안녕하세요.레퍼런스 변수의 경우 레퍼런스 카운터에 의해 메모리에서 해제 되는 시점을 확인 한다고 이해 했는데요.캡쳐 리스트에서 weak self 를 사용 할 경우 레퍼런스 카운터가 증가하지 않게 되고그래서 클로저 변수를 메모리에서 해제 하지 않아도 결국 클래스의 deinit이 호출되는것을 확인 하였습니다.그렇다면 weak를 사용해 캡쳐 된 레퍼런스 변수들은 메모리에 그대로 남아 있는건가요?아니면 클래스인스턴스에서 레퍼런스 카운터가 0이 될 때 메모리에서 weak로 참조된 변수들도 같이 해제 되는건지 궁금합니다.
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
concurrency_1 강의 코드 결과 중 이해가 안가는 부분이 있습니다
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() start() } func simpleWork() { print("doing simple work") } func someWork() async -> Int { try? await Task.sleep(nanoseconds: 1000 1000 1000 * 3) return 10 } func start() { Task { print("start !") let num = await someWork() print(num) print("finish !") } simpleWork() } }concurrency_1 강의를 듣고 위의 코드를 playground가 아닌 project파일을 만들어서 실행시켜보았습니다.저는 아래와 같은 결과가 나올거라 예상했었습니다.start ! doing simple work 10 finish그런데 빌드를 시켜서 터미널에 뜨는 것을 보니 아래와 같은 결과가 나옵니다.doing simple work start ! 10 finish !Task 자체를 통째로 아예 비동기 작업으로 인식해서 이런 결과가 나오는 것일까요??결과가 이렇게 나오는 이유를 잘 모르겠습니다🥲
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
self.navigationBar.topItem?.leftBarButtonItem을 해도 button이 보이지 않습니다
강사님의 코드와 똑같이 코드를 구성했는데 버튼이 보이지 않습니다addsubView방식은 보이는 상황입니다 ㅠㅠ혹시 바뀐부분이있는걸까요
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
func 기능을 쓸때 self. 을 왜쓰는지 이해가 잘안되네요 ㅠㅠ
안녕하세요 func 기능을 쓸때 self. 이것을 많이 쓰는데 왜 써야하는지 100퍼센트 이해가 안되네요 혹시 어떨때 쓰는지 알수있을까요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Closure2 강의에서 예문처럼 똑같이 myfunc2, myfunc3 만들었을때
저 같은경우에는 myfunc2,myfunc3 를 만들었을때 myfunc라고 타입했을경우 아무것도 안뜨는데 오류인가요?ㅠㅠ
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
클론강의 tableViewCell
8:17 에 데이터모델을 받는 변수를 왜 굳이 함수로 만드는 이유를 자세히 알려주세요20:10 에 왜 movieModel처음에 nil에 할당 되어 있다가 바로 movieMoel 데이터가 안담겨지나요 ? 비동기적으로 처리한 데이터를 movieModel에 넣었을때, collectionView를 reloadData를 한 이유를 컨트롤러 생성 과정을 통해 자세히 알려주세요
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Location.pin강의에서 self질문이요
안녕하세요 강의내용중에 질문있어서 글올립니다.PinLandMark라는 열거형에서 var title: String { return "\(self)" // self는 case를 가르킴 }이부분에 해당하는 self가 열거형의 case를 나타낸다고 이해했는데 왜 그렇게 되나요?밑의코드인 var coordinate:CLLocationCoordinate2D { switch self { case .Deoksugung: return .init(latitude: <#T##CLLocationDegrees#>, longitude: <#T##CLLocationDegrees#>) case .Hyeongbokgung: return .init(latitude: <#T##CLLocationDegrees#>, longitude: <#T##CLLocationDegrees#>) case .SeoulCityHall: return .init(latitude: <#T##CLLocationDegrees#>, longitude: <#T##CLLocationDegrees#>) } }의경우 switch self가 PinLandmark를 가르키지않나요?제가 이해한건 self라는건 class,struct,열거형의 인스턴스를 가르킨다고알고있는데 제가 잘못이해한건가요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
넷플릭스 table cell 관련해서 질문이 있습니다.
안녕하세요. 넷플릭스 프로젝트를 따라하면서 제가 수강하면서 뭔가를 놓친건지 막혔었다가 해결한 부분이 있습니다. 테이블 섹션마다 영화, 팟캐스트 등의 이미지를 보여주는 콜렉션뷰의 높이는 UICollectionViewDelegateFlowLayout로 sizeForItemAt 메소드로 설정해줬는데 테이블뷰의 row 높이를 설정해주지 않아서 콜렉션 셀의 높이와 너비를 지정했음에도 사진처럼 적용되지 않는 현상이 있었습니다.해결은 테이블뷰 델리게이트로 heightForRowAt으로 높이값을 콜렉션 셀의 높이값보다 크게 지정해줘서 해결은 됐습니다. 해결은 했는데 강의를 수강하면서 테이블뷰 row의 높이값을 설정하는 부분을 못본 것 같은데 제가 뭔가 놓친건지 질문드립니다.P.S. 좋은 강의 감사합니다 🙏
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Capturing Valus
cloule 3번째 강의에서 // Capturing Valus// reference Type(class, function, closure)// value Type(Int, String, Array, Dictionary, struct)라고 알려주셨는데 String은 reference type가아닌가요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
안녕하세요 todolist강의중에서 UI구성중 xib파일 오토레이아웃질문입니다.
안녕하세요 xib파일에서 오토레이아웃 설정중에 오류가 나와서 질문드려요위와같이 xib파일에서 테이블셀에 오토레이아웃을 적용했는데 시뮬레이터에서는 오토레이아웃이 적용이안되고있습니다. xocde껐다 실행하기와 컴퓨터를 껐다켰는데도 이러는데 혹시 왜이러는건지 질문드려도될까요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
환율 강의 테이블뷰에서 데이터 관련 질문있습니다.
안녕하세요 강의진행하면서 궁금한게있어서 질문드립니다.저의 경우 처음 Picker 뷰에서 rates배열에 url로 데이터 파싱한 데이터를 Table탭에서 delegate패턴을 이용해서 가져오는식으로 데이터를 가져오려 했습니다.먼저 Picker코드입니다. // // ViewController.swift // Exchange Rate // // // import UIKit class PickerViewController: UIViewController { @IBOutlet weak var usdTextField: UITextField! @IBOutlet weak var selectedCurrency: UITextField! @IBOutlet weak var selectedCurrencyName: UILabel! @IBOutlet weak var currencyPicker: UIPickerView! var rates: [(String,Double)]? // table data delegate weak var delegate: tableDataDelegate? // picker row변화에 따른 observer property 계산 var selectedRow = 0 { didSet { selectedCurrencyName.text = rates?[selectedRow].0 selectedCurrency.text = calculateCurrency() } } func calculateCurrency() -> String { let selectedValue = rates?[selectedRow].1 ?? 0 let usdValue = Double(usdTextField.text ?? "") ?? 0 let resultValue = String(format: "%.2f", (selectedValue * usdValue)) return resultValue } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.navigationItem.title = "Currency Converter Picker" fetchJson() //picker 연결 currencyPicker.delegate = self currencyPicker.dataSource = self // textField delegate usdTextField.delegate = self // porotcol delegate } func fetchJson() { let urlString = "https://open.er-api.com/v6/latest/USD" guard let url = URL(string: urlString) else {return} // data task URLSession.shared.dataTask(with: url) { data, res, err in guard let data = data else {return} do { let currencyModel = try JSONDecoder().decode(CurrencyModel.self,from: data) // rates: [key:value] 형태 // let rates = currencyModel.rates?.map { [$0 : $1] } // let rates2 :[(String,Double)]? = currencyModel.rates?.sorted(by: { dic1, dic2 in // dic1.key < dic2.key // sorted같은걸하면 Dictionary.Element가되서 tuple로 바뀜 // }) self.rates = currencyModel.rates?.sorted{ $0.key<$1.key } // picker 새로고침해야 데이터 내용이 보임 DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } // get table data print("rate: ",self.rates!) self.delegate?.getData(data: self.rates! ) // print("currentModel",currencyModel) } catch { print(err!) } }.resume() } } extension PickerViewController:UIPickerViewDelegate,UIPickerViewDataSource { func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return rates?.count ?? 0 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { let key = rates?[row].0 ?? "" let value = rates?[row].1.description ?? "" return key + " " + value } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectedRow = row } } extension PickerViewController:UITextFieldDelegate { func textFieldDidChangeSelection(_ textField: UITextField) { selectedCurrency.text = calculateCurrency() } } 저의 경우 DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } // get table data print("rate: ",self.rates!) self.delegate?.getData(data: self.rates! )여기서 rates가 전부불어와지면 delegate를 이용해서 해당데이터를 table뷰로 가져오려고 의도했습니다. table데이터입니다.// // ListViewController.swift // Exchange Rate // // import UIKit protocol tableDataDelegate:AnyObject { func getData(data:[(String,Double)]) } class ListViewController: UIViewController { // Data list var conData = [(String,Double)?]() @IBOutlet weak var udsLabel: UILabel! @IBOutlet weak var costTextField: UITextField! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.navigationItem.title = "Currency Converter Table" self.udsLabel.text = "UDS" // table // tableView.delegate = self tableView.dataSource = self let sb = UIStoryboard(name: "Main", bundle: nil) guard let detailVC = sb.instantiateViewController(withIdentifier: "PickerViewController") as? PickerViewController else {return} detailVC.delegate = self tableView.rowHeight = 100 } } extension ListViewController:UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("cor: ",conData) return 10 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell") as! MyTableViewCell cell.currencyLabel.text = "good" cell.valueLabel.text = "allaal" return cell } } extension ListViewController: tableDataDelegate{ func getData(data: [(String,Double)]) { print("data: ",data) self.conData = data // print(self.conData) } } 여기서 delegate프로토콜을 만들고 Picker뷰에서 가져온 데이터를 conData라는 배열에 담아서 저는 담겨진 데이터를 이용해서 테이블뷰에 데이터를 뿌리는식으로 작업하려했는데 이런식으로 하니 프로토콜이 제대로 안되서인지 conData에 데이터가 담기지 않고 빈배열이 나옵니다.. 저의경우 table뷰에서 델리게이트를 사용한다고 위임하는 코드를 let sb = UIStoryboard(name: "Main", bundle: nil) guard let detailVC = sb.instantiateViewController(withIdentifier: "PickerViewController") as? PickerViewController else {return} detailVC.delegate = self이렇게 Main에있는 스토리보드를 가져와서 권환을 위임했는데 이게 틀린걸까요?어디가 잘못됐는지 잘모르겠습니다.. 답변 부탁드립니다!
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
환율 네트워크처리1 질문있습니다.
안녕하세요 강의 41:46분에pickerView 의 delegate중에서 didSelecRow에 관해서 궁금한게있는데 해당 delegate속성이 picker로인해 선택된 row를 반환해준다고 알고있습니다.궁금한게[ didSeleectRow가있는 delegate메서드를 사용하려면 저는 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectedRow = row } 여기 함수안에서 var selectedRow = 0 { didSet { selectedCurrencyName.text = rates?[selectedRow].0 selectedCurrency.text = calculateCurrency() } }위에 해당하는 코드를 작성해야 함수가 작동된다고 생각했는데 강사님 강의보니 그게아니더라구요 왜 그런건가요? 가만생각해보니 didSelecRow에서 현재 선택된 row정보만 얻기위한 용도로 pickerView didSelectRow 델리게이트 메서드를 이용했고 row정보를 얻었으니 화면에 뿌려주는 역활은 굳이 안해도되기떄문에 위의코드처럼 따로 didSet속성을 이용해서 화면을 나타낸걸로 이해했는데 제가 이해한게 맞을까요?
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
변수 let 위치 질문입니다.
안녕라세요 강의 Result Type 8:18 부분에 switch문에서 해당하는case에 따라서 success,failure부분을 나눠서 하는 조건에서 let의 위치를 ()안에 쓸수도,바깥에 쓸수도있는걸 처음알았는데 혹시 이개념은 어떨때 사용하는지 알수있을까요? 그리고 해당 개념을 뭐라고 하는지도 알수있을까요?
- 해결됨성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
섹션 9 영상 잘림 확인 부탁드립니다
Movie Player 파트와 이어지는 Navigation Design 파트 사이에 영상이 잘린 것 같습니다. 확인 부탁드립니다. 반복해서 강의 잘 보고 있습니다 감사합니다
- 미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
안녕하세요 강의내용 질문입니다.
안녕하세요 좋은강의 만들어주셔서 감사합니다.혹시 싱글톤패턴하고 ARC부분은 강의파트중에서 어디부분에서 가르쳐주시는지 알려주실수있으신가요?또한 개인적으로 여쭙고싶은건 강사님 강의들으면서 개인 포트폴리오 앱을 하나 만들려하는데 강의전부를 듣고 만들어보는게 좋을지 아니면 포트폴리오만드는걸 강의들으면서 병행으로 하면좋을지 궁금합니다. 감사합니다!