묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
(기초-3)가위바위보 앱 만들기 - 기초 앱 강의 12강 질문입니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의 코드를 모두 동일하게 작성을 했는데 comChoice의 값이 랜덤으로 바뀌지를 않는 거 같아요. myChoice는 select를 누를 때마다 변하는데, comChoice는 처음 값만 그대로 가고 변하지를 않습니다. 어떤 부분이 문제인가요?? // // ViewController.swift // RPSGame // // Created by Gahyun Kim on 2023/07/12. // import UIKit class ViewController: UIViewController { //변수 / 속성 @IBOutlet var mainLabel: UILabel! @IBOutlet var comImageView: UIImageView! @IBOutlet var myImageView: UIImageView! @IBOutlet var comChoiceLabel: UILabel! @IBOutlet var myChoiceLabel: UILabel! var myChoice = Rps(rawValue: Int.random(in: 0...2))! var comChoice = Rps(rawValue: Int.random(in: 0...2))! //함수 / 메서드 //앱의 화면에 들어오면 처음 실행되는 함수 override func viewDidLoad() { super.viewDidLoad() // 1) 첫번째/두번째 이미지뷰에 준비(묵) 이미지를 띄워야 함 comImageView.image = #imageLiteral(resourceName: "ready") myImageView.image = UIImage(named: "ready.png") // 2) 첫번째/두번째 레이블에 *준비*라고 문자열을 띄워야 함 comChoiceLabel.text = "준비" myChoiceLabel.text = "준비" } @IBAction func rpsButtonTapped(_ sender: UIButton) { // 가위/바위/보(enum)를 선택해서 그 정보를 저장해야함 //버튼의 문자를 가져옴 guard let title = sender.currentTitle else { return } print(title) switch title { case "가위" : myChoice = Rps.scissors case "바위" : myChoice = Rps.rock case "보" : myChoice = Rps.paper default : break } } @IBAction func selectButtonTapped(_ sender: UIButton) { // 1) 컴퓨터가 랜덤으로 선택한 것을 이미지뷰에 표시 // 2) 컴퓨터가 랜덤으로 선택한 것을 레이블에 문자열로 표시 switch comChoice { case Rps.rock : comImageView.image = #imageLiteral(resourceName: "rock") comChoiceLabel.text = "바위" case Rps.paper : comImageView.image = #imageLiteral(resourceName: "paper") comChoiceLabel.text = "보" case Rps.scissors : comImageView.image = #imageLiteral(resourceName: "scissors") comChoiceLabel.text = "가위" } // 3) 내가 선택한 것을 이미지뷰에 표시 // 4) 내가 선택한 것을 레이블에 문자열로 표시 switch myChoice { case Rps.rock : myImageView.image = #imageLiteral(resourceName: "rock") myChoiceLabel.text = "바위" case Rps.paper : myImageView.image = #imageLiteral(resourceName: "paper") myChoiceLabel.text = "보" case Rps.scissors : myImageView.image = #imageLiteral(resourceName: "scissors") myChoiceLabel.text = "가위" } // 5) 컴퓨터가 선택한 것과 내가 선택한 것을 비교해서 이겼는지/졌는지 판단해서 문자열로 표시 if comChoice == myChoice { mainLabel.text = "비겼다" } else if comChoice == .rock && myChoice == .paper { mainLabel.text = "이겼다" } else if comChoice == .paper && myChoice == .scissors { mainLabel.text = "이겼다" } else if comChoice == .scissors && myChoice == .rock { mainLabel.text = "이겼다" } else { mainLabel.text = "졌다" } } @IBAction func resetButtonTapped(_ sender: UIButton) { // 1) 컴퓨터가 다시 처음 준비 이미지뷰에 표시 // 2) 컴퓨터가 다시 준비 레이블에 문자열로 표시 comImageView.image = #imageLiteral(resourceName: "ready") comChoiceLabel.text = "준비" // 3) 내 선택 이미지뷰에도 준비 이미지를 표시 // 4) 내 선택 레이블에도 준비 문자열 표시 myImageView.image = #imageLiteral(resourceName: "ready") myChoiceLabel.text = "준비" // 5) 메인 레이블 *선택하세요* 표시 mainLabel.text = "선택하세요" // 6) 컴퓨터가 다시 랜덤 가위/바위/보를 선택하고 저장 comChoice = Rps(rawValue: Int.random(in: 0...2))! } }
-
미해결개발하는 정대리 스위프트 기초 문법
Xcode 단축키, 강의 내용 개인 블로그 공유 문의 드립니다.
안녕하세요.애플 환경은 처음이라 아직도 ctrl + c / v 가 익숙합니다. 강의 따라 코딩 하다보니 Xcode 단축키를 알면 더 생산성이 좋지 않을까 싶은데 강사님께서 꼭 필요하다고 생각되는 단축키 공유 부탁드려도 될까요 ?그리고 강의 내용 개인블로그에 올려도 될까요 ? 유튜브 링크하고 출처도 같이 올리겠습니다.^^
-
미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.
안녕하세요 앨런(Allen)님!수강 중 질문이 생겨 처음 인사드립니다.[섹션0.GCD - 1.GCD/Operation에 앞서] 강의까지 듣고 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지 질문드립니다.-2개 이상의 프로세스가 동시에 작업하는 것이 ‘동시성 프로그래밍(Concurreny Programming)’이고 IOS에서 이러한 동시성 프로그래밍을 사용하기 위해 작업을 대기행렬(Queue)에 보내며, 대기행렬(Queue)은 직렬(Serial)과 동시(Concurrency)이라는 특성을 가지고 있다고 이해했습니다.이 과정에서 동기(Sync)는 작업을 다른 스레드(Thread)에서 하도록 시킨 후, 기다렸다가 다음 일을 진행한다고 설명해 주셨는데 그렇다면 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지 확실하게 확인하고 넘어가면 좋을 것 같아 질문을 드리게 되었습니다.추가로 대기행렬(Queue)의 특성 중 직렬(Serial)은 작업을 분산시킨 *메인 스레드(Thread)가 있기 때문에 동시성 프로그래밍(Concurreny Programming)으로 볼 수 있다고 이해했는데 이해한 내용이 맞는지도 함께 답변 주시면 큰 도움이 될 것 같습니다.*강의 영상에서 말하는 Thread1을 작성한 것입니다.-혹시 제가 잘못 이해한 부분이 있으면 함께 답변 남겨주시면 감사하겠습니다 :)
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
기초앱 12강 가위바위보 앱 viewDidLoad() 함수 내부 구현 질문
안녕하세요 강의 잘 듣고있습니다!!제가 가위바위보 앱을 강의 보면서 따라만들때는 이 오류가 안떴는데 혼자 복습하면서 만들다보니 viewDidLoad 함수 내부에서 comImageView.image = #imageLiteral( 준비 이미지를 설정하는데 빌드를 하면 오류가 뜹니다.오류는 : Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value라고 뜨는데 comImageView.image 에 준비 이미지를 넣어줬는데도 왜 옵셔널이라 뜨는거죠..? 원본 코드랑 비교해도 다른 점이 없고 구글링해도 안나와서 질문드립니다ㅠㅠ답변해주시면 감사하겠습니다!아래는 제 ViewController 화면입니다
-
미해결성공적인 진짜 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 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
테이블뷰(커스텀델리게이트) - 2 (MVVM으로 바꾸기) (업데이트-13강) 질문
안녕하세요. 선생님 강의 잘 보고 있습니다.질문이 하나 있는데 MemberListViewModel에서 numberOfRowsInSection 메서드에 section은 왜 매개변수로 받는건가요..? 받은 section을 사용하진 않는거같은데..
-
해결됨[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
ShareLink에서 이미지 링크에서 이미지 크기 제한이 있나요?
제가 찍은 jpg를 png 타입으로 변환을 했더니 64M의 크기 가 나오더군요. 무심코 이 파일을 사용했더닌 Preview Cruch ㅎ라고 화면에 빨간 X가 이미지가 나타납니다 이런 경우 정상 처리를 할 수 있는 방법이 있을까요?이미지는 30M 이하만 첨부가 되서 올리지는 못했습니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용-8 앱 / 디테일화면 만들기
활용 8 강의를 보면서 MemberList App 을 만들고 있는데 강의와 동일하게 Member Model 에서 memberImage를 lazy var 로 선언했는데 위 사진처럼 오류가 발생하는 이유가 궁금합니다.
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
self.navigationBar.topItem?.leftBarButtonItem을 해도 button이 보이지 않습니다
강사님의 코드와 똑같이 코드를 구성했는데 버튼이 보이지 않습니다addsubView방식은 보이는 상황입니다 ㅠㅠ혹시 바뀐부분이있는걸까요
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Code Base로 따로 구현해봤는데 막히는 부분이 있어서 질문드려요
안녕하세요! 앨런님, 강의 정말 잘 듣고 있습니다. 좋은 강의 만들어주셔서 감사합니다.다름이 아니라 ToDo 앱 강의를 참고해서 제 방식대로 스토리보드 사용하지 않고 코드로 앱을 만들어보고 있는데요. 막히는 부분이 있어서 질문드립니다!하단에 있는 4개의 Button들을 동그랗게 하고 싶어서 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() colorButtons.forEach { button in button.clipsToBounds = true button.layer.cornerRadius = button.frame.width / 2 } } 이렇게 구현했지만 전혀 바뀌는게 없어서 button.frame.width 를 print해봤는데 0.0이 나오네요...이건 왜그러는걸까요?참고로 말씀드리면 4개의 버튼은 모두 UIStackView의 subView입니다!혹시나 스택뷰의 서브뷰라 그런것인가 해서 구글링을 해봤습니다!print(stackView.arrangedSubviews[0].frame) print(stackView.arrangedSubviews[1].frame)근데 이렇게 해봐도 똑같이 0.0이 나오더라구요,,, ㅠㅠㅠ 도저히 이해가 안돼서 질문드립니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
직전화면으로 돌아가는 기능 질문
안녕하세요 선생님 항상 강의 잘 보고 있습니다. 저 질문이 있는데 제가 예전에 선생님 강의에서 바로 직전화면으로 돌아가는걸 설명해주는 강의를 봤던 기억이 있는데 rootviewcontroller에서 -1 해서 직전화면으로 가는..? 이런 로직이었던거같은데 도저히 못찾겠어서.. 이런 질문 드려서 죄송하지만 혹시 그게 몇강인지 좀 알 수 있을까요..??
-
해결됨[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17
LineMark 에서 symbol을 사용하면 라인이 표시가 안됩니다.
LineMark 에서 symbol을 사용하면 라인이 표시가 안됩니다.제공하신 예제 프로젝트도 동일합니다.강의 영상과 동일하게 하려면 어떻게 해야 하나요?
-
미해결앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정)
27강 스마일 뽑아내는 코드 if문이 필요가 없네요~
if문이 필요가 없네용
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
검색어 넘어갈때 질문있어요.
안녕하세요 엘런,활용9를 코드 베이스로 구현 해봤는데띄어쓰기를 포함해서 검색하면 이런 에러가 나는데 이유가 궁금합니다... ! 제공해주신 파일에서도 그렇더라구요.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용-8 앱 / 저장속성과 didSet을 사용하는 패턴 (활용 앱66강)
var member: Member? { didSet { guard var member = member else {return} mainImageView.image = member.memberImage memberNameLabel.text = member.name addressLabel.text = member.address } }안녕하세요 앨런님해당 강의에서 didset 부분의 언래핑하는 부분에서guard let 으로 하지 못하는 이유를 알고싶습니다let 이여도 내부의 프로퍼티가 var 라면 읽을 수 있는것이 아닌지요?lazy로 선언되어서 그런것 같은데 문법부분을 제가 잘 모르는것 같습니다이러한 부분은 문법파트중에 어느부분을 봐야 해소가 될까요?
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
GCD 사용시 주의사항 강의 질문있습니다.
weak self 사용해서 코드 동작 시 "글로벌큐에서 출력하기" 가 출력이 안나와야하는데 출력이 됩니다.. 어떤 문제가 있을까요..?이미지 첨부합니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
섹션 15 동기와 비동기의 개념 질문있습니다
강의를 듣던 도중 동기 , 비동기, 직렬, 동시 에 개념에 대해서 질문이 생겼습니다.직렬의 경우 그림으로 표현해 주셨던 것처럼다른 하나의 쓰레드에서 task를 순서에 따라 전부 다 처리한다고 이해했는데,제가 이해한 것이 맞다면, 동기 방식으로 직렬 테스크를 처리했을 때 굳이 다른쓰레드로 테스크를 넘기는 것이 의미가 있나요? 비동기라면 해당 테스크를 직렬로 처리하더라도 동시에 다른 테스크를 진행할 수 있다고 생각하지만 동기처리의 경우 결국 메인쓰레드에서 진행하는 것과 같은 수준의 처리시간이 들고 오히려 쓰레드를 바꾸는데에 대한 리소스만 더 사용하게 되는것은 아닌가요??라는 의문이 들었습니다..!
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용8, 오토레이아웃 설정에서 질문있어요
안녕하세요, 엘런저번에 코드로 넷플릭스 로그인 화면을 구성할 때는UIView에 대한 오토레이아웃 설정을override init(frame: CGRect) { super.init(frame: frame) setup() addViews() setConstraints() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }이렇게 해주었는데이번 강의에서 언급된 updateConstraints() 메서드를 활용하지 않은 이유가 있을까요?? 넷플릭스 로그인 화면의 오토레이아웃 메서드인 setConstraints()만 updateConstraints()에 넣어주면 뷰를 띄우는 순서?에 관련한 오류가 나서요.뷰 자체를 생성하는 것이라 drawing cycle을 제외하고 생각해도 돼서 그런건가?라는 생각이 들어서 질문드립니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용-7, 데이터 저장에 대해서 질문있어요.
viewDidLoad에서 let array = movieDataManager.getMovieData()로 데이터를 담았더니 스파이더맨2 추가가 안 되고, 셀을 구성할 때let array = movieDataManager.getMovieData() let movie = array[indexPath.row]cell.mainImageView.image = movie.movieImagecell.movieNameLabel.text = movie.movieNamecell.descriptionLabel.text = movie.movieDescription이렇게 넣어주니까 추가가 되는 것 같은데. . 제가 어디서 놓친건지 아니면 원래 안 되는건지 모르겠어요 ..
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용 - 2) 텍스트필드 / 델리게이트 패턴 개념 질문
안녕하세요 앨런님 델리게이트 패턴 관련해서 궁금한게 있어서 질문 드려봅니다.1.텍스트필드 delegate에 ViewController 인스턴스 등록2.View 인스턴스는 UITextFieldDelegate 프로토콜 채택3.텍스트필드에서 실제 이벤트 발생시 등록된 delegate의 메서드를 호출(아마 호출된 메서드의 반환값을 이용하여 허용 또는 금지를 시킬것같은데 잘은 모르겠습니다.)4.ViewController 클래스에서는 필요한 논리를 작성하거나 Bool 형식으로 값을 리턴하여 텍스트필드를 제어UITextFieldDelegate 프로토콜을 채택하고 사용하면 되기에해당 메서드의 구현부는 공개할 필요가 없음.제가 이해한것이 맞는지 판단이 안서서 질문 남겨봅니다.