묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
6-7) 이미지 사이즈 지정 위치 질문드립니다.
안녕하세요 애구마님!6-7) 7:50 쯤에 이미지의 사이즈를 지정해주기 위해 frame() 작성하시는 부분에 질문이 있습니다.bigBanner의 이미지 사이즈 지정 시AsyncImage(url:URL(string:bigBanner)) { image in image .resizable() .cornerRadius(10) .aspectRatio(contentMode: .fit) // 여기서 사이즈 지정 .frame(width: 300, height: 525) }poster의 이미지 사이즈 지정 시 AsyncImage(url: url) { image in image .resizable() } placeholder: { ProgressView() .tint(Color.white) } // 여기서 사이즈 지정 .frame(width: 100, height: 175) 첫 번째 AsyncImage를 작성하셨을 때 이미지 사이즈는 image에서 직접적으로 작성하셨는데 두번째 포스터들의 이미지 사이즈를 작성하실 때는 placeholder 아래쪽에 작성하신 이유가 궁금합니다.답변 부탁드립니다.감사합니다 :)
-
미해결UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
movieapp 3 46분 실행이 안돼요ㅜㅜ
뭔가 제가 코드를 잘못 친걸수도 있는데 처음부터 보면서 비교했는데도 정말 모르겠어요ㅜㅜ...알 수 있을까요?moviemodel// // MovieModel.swift // MovieApp import Foundation struct MovieModel: Codable{ let resultCount: Int let results: [Result] } struct Result: Codable{ let trackName: String let previewUrl: String let image: String //이름 똑같이 쓸거면 쓸필요 없다 enum CodingKeys: String, CodingKey{ case image = "artworkUrl100" case trackName case previewUrl } } moviecell// // MovieCell.swift // MovieApp import UIKit class MovieCell: UITableViewCell{ @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var dateLabel: UILabel! @IBOutlet weak var descriptionLabel: UILabel! @IBOutlet weak var priceLabel: UILabel! @IBOutlet weak var movieImageView: UIImageView! } viewcontroller// // ViewController.swift // MovieApp import UIKit class ViewController: UIViewController { var movieModel: MovieModel? @IBOutlet weak var searchBar: UISearchBar! @IBOutlet weak var movieTableView: UITableView! override func viewDidLoad() { super.viewDidLoad() movieTableView.delegate = self movieTableView.dataSource = self searchBar.delegate = self requestMovieAPI() } //network 호출해서 뿌려주는 부분! //일종의 규격같은 느낌 이렇게들 씁니다 func requestMovieAPI(){ let sessionConfig = URLSessionConfiguration.default let session = URLSession(configuration: sessionConfig) // https://itunes.apple.com/search?term=marvel&media=movie var components = URLComponents(string: "https://itunes.apple.com/search") let term = URLQueryItem(name: "term", value: "marvel") let media = URLQueryItem(name: "media", value: "movie") components?.queryItems = [term, media] guard let url = components?.url else{ return } var request = URLRequest(url: url) print(request) request.httpMethod = "GET" let task = session.dataTask(with: request) { data, response, error in // 제일 중요한 부분 //statusCode //200 - 성공 //300 - 다른 주소로 넘어가서 줄수있다(리다이렉션) //400 - 에러(내가 잘못해서) //500 - 서버, 네트워크가 아예 잘못된 경우 print((response as! HTTPURLResponse).statusCode) if let hasData = data{ do{ //규격에 맞춰 써야함 ituns api는 json타입으로 줌 self.movieModel = try JSONDecoder().decode(MovieModel.self, from: hasData) print(self.movieModel ?? "no data") DispatchQueue.main.async{ //데이터 갱신 self.movieTableView.reloadData() } }catch{ print(error) } } } task.resume() session.finishTasksAndInvalidate() } } extension ViewController: UITableViewDelegate, UITableViewDataSource{ //개수 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.movieModel?.results.count ?? 0 } //MovieCell과 연결 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MovieCell", for: indexPath) as! MovieCell cell.titleLabel.text = self.movieModel?.results[indexPath.row].trackName return cell } } extension ViewController: UISearchBarDelegate{ func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { } }
-
미해결[iOS] Swift Modern Collection View & MVVM 패턴 가이드
"섹션에 맞는 다양한 레이아웃 구현" 강의 질문있습니다.
self?.dataSource.sectionIdentifier(for: sectionIndex)위 코드로 섹션을 구분하여 레이아웃을 지정할 수 있다는 것을 알게되었습니다. 내부 동작으로 어떻게 섹션이 구분되는지 궁금합니다. 일반적으로 컬렉션 뷰를 구현할 때는override func numberOfSections(in collectionView: UICollectionView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 }위 코드의 섹션 카운트 수에 따라 섹션을 구분하는 것으로 알고 있습니다. ex) return이 3이면 0, 1, 2하지만 강의에서는 위 코드를 사용하지 않았으니 그러면sectionIndex의 값을 어디서 가져오나요?
-
미해결아이폰 앱 개발 기본편(해피스마일 iOS 개발 부트캠프)
강의 자료는 어디서 다운로드 받나요?
강의 자료를 아무리 찾아도 안 보입니다.
-
미해결Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)
클린아키텍처 의존관계 관련
안녕하세요.클린아키텍쳐에 대해 다시 공부하다가 근본적인 궁금증이 생겨서 질문 드립니다.저는 강사님 강의를 수강하였고 구글에 여러 레포지토리를 참고하며 아래 구조로 프로젝트를 진행하였습니다. 그러나 최근 java + spring architecture 를 공부하다가 모바일쪽의 클린아키텍쳐와 일부 개념이 충돌하여 혼란을 겪고 있습니다. 위의 그림과 같이 바깥의 presentation/repository 와 같은 계층이 usecase 를 의존하여 개발해야 비즈니스로직(usecase / entity) 가 presentation/repository 의 변화의 의존적이지 않고 온전한 비즈니스 로직을 구현할 수 있습니다. 이러한 문제를 해결하기 위해 백엔드 진영에서는 헥사고날 아키텍쳐로 구현하는 듯 합니다. 참고) https://www.youtube.com/watch?v=saxHxoUeeSw04:00 ~ 06:30, 08:20 ~ 14:00 모바일 진영에서는 domain layer 의 usecase 가 repository 를 그대로 참조하고 있어(물론 개념적으로는 인터페이스를 참조) repository 의 변경에 따른 usecase 변화로 비즈니스로직 및 도메인이 손상될 수 있다고 생각하는데 대부분 그냥 사용하고 있습니다. 그래서 제가 잘 못 이해한 것인지 아니면 다른 이유가 있는 것인지 강사님의 의견이 궁금합니다.또한 Flutter 테스트 기초 다음 강의는 언제 나오는지도 궁금합니다 ㅎㅎ 감사합니다.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
강의 자료를 모아보는 프로그램을 제작해보려고 합니다!
안녕하세요! 다름이 아니라 강의 자료를 모아보는 앱을 하나 만드려고 하는 상황입니다이 앱을 만들기 위해 애구마님 강의도 열심히 들을 예정입니다ㅎㅎ 예를 들어 1강부터~ 12강까지 강의가 있고 각각 pdf나 ppt 등의 강의 자료가 있다고 가정했을 때스위프트UI의 List 기능을 이용해서 리스트로 만들어 자료를 쉽게 찾아볼 수 있도록 만들고 싶습니다다만 지금 막힌 부분이 일단 List의 각각의 제목을 작성해줘야 하는데 제목을 파일명에서 긁어오고 싶습니다그리고 막힌 부분이 하나 더 있는데 파일을 불러오는 코드를 작성하고 싶은데 잘 모르겠습니다 구글링을 해보니까 PDFKIT이라는 라이브러리가 있는 것 같은데 제가 자료를 못 찾은 건지 UIKIT으로 작성된 예제 코드들 뿐이어서 파일 불러오기부터 막힌 상황입니다...! 혹시 괜찮으시다면 번거로우시겠지만 도와주실 수 있으실까요?? 구현하고자 하는 앱의 구조는 대강 아래와 같습니다일단 앱을 설치하면 아이폰이나 아이패드 내부에 해당 앱에서 볼 강의 자료 파일들을 담을 폴더가 자동으로 생성각각의 강의 자료들을 폴더로 옮김폴더에 파일이 들어올 때마다 순서대로 List에 추가(파일 이름에 1강 or 1. 등 순서를 구분할 수 있는 인덱스를 포함할 예정)실제로 뷰에서 보이는 List의 각각의 이름들은 파일 이름을 그대로 긁어오고 싶음 이 정도입니다..! 아 참고로 아주 기본적인 내용 뿐이지만 Text 뷰나 Button, (V, H, Z)Stack 등 아주 아주 기본적인 내용은 이해하고 있는 상황입니다 ㅎㅎ 아직 강의를 초반까지 밖에 듣지 않았지만 굉장히 쉽게 설명해주시려고 노력하는 부분이 저 같은 초심자에게는 굉장히 크게 와닿는 것 같습니다 남은 강의도 열공 해보겠습니다 좋은 하루 보내세요! 감사합니다!
-
해결됨UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
missing constraints 에러
구글링을 하다 못찾겠어서 질문게시판에 남겨요!ㅠㅠsetting app_6 강의에서 20분대쯤에uiview로 선을 만들어서 위치조정을 해주는데이런 missing constraints에러가 나요!우선 저는 강의를 똑같이 따라했어요. 순서도 똑같이요!uiview를 하나 끌고와서 높이1, Email과 vertical spacing 10, tailling이랑 leading 0 으로 맞춰주었어요.그런데 height도 1로 안변하고(여전히 상자가 두껍고...) email이랑 spacing도 제대로 안된거같고...유일하게 적용된게 tailling이랑 leading 0으로 된 것이에요...ㅠㅠ 왜 이런걸까요??
-
해결됨UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
콘솔창 print 내용 안 뜸
Dispatch Queue강의를 듣는도중에앱을 실행시키고 맨 위 버튼을 누르면 숫자가 콘솔창에 출력되어야하는데 출력되지 않습니다ㅠㅠ맨 밑에 all output이라 떠야하는데 저는 눈모양이랑 토글?모양이 나오는 점이 다른 것 같은데 어떻게 바꾸나요...
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
깃허브 문의
안녕하세요. 애구마님 현재 강의는 구매했고 먼저 하던 공부를 끝낸 후 보려고 준비중인데 현재 이 강의를 공부하면서 클론 코딩을 할때 저의 깃허브에 공개용으로 코드나 강의에서 중요한 설명을 코드에 주석처리해서 업로드해도 괜찮을까요? 출처는 Readme로 남기려고 합니다. 깃허브는 이력서 제출시 포트폴리오와 함께 사용하고 있습니다.감사합니다.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
NavigationLink 질문
NavigationLink를 통해서 화면 전환을 하게 되면 기본적으로 > Back 버튼이 생성이 됩니다.혹시 이걸 제가 원하는 형태로 커스텀 할 수 있을까요?
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
서적 추천 부탁드립니다!
안녕하세요! 이제 막 섹션 0을 수강 완료한 수강생입니다 다름이 아니라 강의랑 함께 볼만한 내용의 서적이 있는지 궁금해서 글을 남기게 되었습니다. 제가 개인적으로 강의 내용들을 책에다가 정리하면서 공부하는 타입이라서 혹시 강의해주시는 내용과 비슷한 서적 추천해주실만한 거 있으시면 추천 부탁드리겠습니다. 좋은 강의 만들어주셔서 감사합니다! 남은 강의도 성실하게 수강하겠습니다 ㅎㅎ
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
혹시 재촬영 계획이 있으신가요?
예전에 듣고 공부하는데 많은 도움이 됐습니다. 혹시 최신 버전으로 재 촬영 계획이 있으신가요?
-
미해결해커를 위한 iOS 앱 모의 해킹 전문 과정
아이폰6 ios 12.5.7 버전 문의
아이폰 6인데 ios 12.5.7 버전입니다.해당 버전 수업에 지장없을까요?
-
해결됨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() 적용?긴 글 읽어주셔서 감사합니다 😃 답변 기다리겠습니다.
-
미해결Flutter 중급 1편 - 클린 아키텍처
event와 ui_event
안녕하세요. event와 ui_event를 구분하셔서 다르게 구현하셨는데, 제가 이해한 것이 맞는지와 문제가 된 부분에 대한 의견이 궁금해서 문의 남깁니다.event와 ui_event를 구분하신게 state의 변경 유뮤가 맞을까요?state가 변경되어 화면의 재빌드가 필요한 경우 eventstate의 변경없이 화면의 재빌드가 필요한경우 ui_event하나의 뷰(StatelessWidget)에서 event와 ui_event를 나눠서 처리하는 경우 event -> notification -> 화면 재빌드 중에 ui_event의 스트림 리스너가 재등록되는 이슈가 있는데요.이런 경우 어떤식으로 처리를 하시나요?아니면 제가 이해를 잘못한 부분이 있을까요?
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
17강 firebase로 이미지 업로드하기에서 업로드가 안됩니다~
선생님! 캡쳐사진 공유드립니다!!
-
미해결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를 이용한 호출은 또 재정의 되기 전 내용이 출력됩니다. 호출 기준이 너무 헷갈리는데 이 부분에 대해서 알려주시면 감사하겠습니다!
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
17강 firebase로 이미지 업로드하기에서 업로드가 안됩니다~
Thread 9: Fatal error: Unexpectedly found nil while unwrapping an Optional value위와같은 오류가 뜨면서,,, 업로드가 안됩니다..
-
미해결Flutter 초입문 왕초보편
에뮬레이터 실행 안됨 오류
Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...Running Gradle task 'assembleDebug'...FAILURE: Build failed with an exception.* What went wrong:A problem was found with the configuration of task ':app:processDebugResources' (type 'LinkApplicationAndroidResourcesTask'). - In plugin 'com.android.internal.version-check' type 'com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask' property 'androidJarInput.androidJar' specifies file 'C:\Users\82104\AppData\Local\Android\Sdk\platforms\android-34\android.jar' which doesn't exist. Reason: An input file was expected to be present but it doesn't exist. Possible solutions: 1. Make sure the file exists before the task is called. 2. Make sure that the task which produces the file is declared as an input. Please refer to https://docs.gradle.org/7.6.3/userguide/validation_problems.html#input_file_does_not_exist for more details about this problem.* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 1m 38sError: Gradle task assembleDebug failed with exit code 1이런 오류가 떠요 에뮬레이터 실행하면 버튼 누르는 앱이 실행되어야 한다고 하는데 이렇게 뜨고 안돼요 어떻게 해야 하나요
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
질문합니다. 섹션 4 - 10 [투두 삭제기능 구현하기(onDelete)]
완전 초보이다보니 궁금증이 생겨서요.투두 타이틀 반복문 쓸땐 List { } 안에서 todoList 의 타이틀들을 반복할땐 Foreach 쓰시고, .onDelete에선 for _ in을 쓰셨는데 서로 적용할 조건이 다른건가요???