Today I Learned 45

20210706 Destiny project -1

Destiny 어플을 만들어본다. d&d처럼 스토리가 진행되면서 사용자가 선택을 하게되고, 그 선택에 따라 다르게 스토리가 진행되면서 전체적인 이야기를 읽게되는 방식의 어플이다. 먼저 기본적인 UI가 완성되어있는 skeleton project를 다운받아서 시작했다. Story text 부분에 스토리가, Choice 버튼에 각각의 선택지가 들어갈 것이며 MVC design pattern을 사용할 예정이다. 1. Model-Story.swift에 구조체를 하나 먼저 만들었다. 각각의 항목에 문자열을 사용할 것이기 때문에 String으로 지정했다. 2. Controller - ViewController.swift에 IBOutlet으로 각각의 버튼과 레이블이 연결되어 있고, IBAction 하나에 레이블과 버튼..

Today I Learned 2021.07.06

20210701 Quizzler project - 5

먼저, 구조체 내부에서의 immutability에 대해 정리했다. https://dmsitter.tistory.com/115 swift - immutability (구조체 안에서) immutable -- let과 같이 불변 mutable -- var과 같이 가변적 struct Town { let name: String var citizens: [String] var resources: [String : Int] init(citizens: [String], name: String, resources: [Strin.. dmsitter.tistory.com QuizBrain.swift의 struct 내부에 있는 두 함수(메소드)를 비교해보면, getProgress()는 property의 값을 변화시키지 않지만..

Today I Learned 2021.07.01

20210628 Quizzler project - 4 (with MVC design pattern)

https://dmsitter.tistory.com/112 MVC Design pattern Design pattern에는 여러가지가 있다. Object Pool, Facade, MVP, Iterator, Singleton, MVC, Memento, MVVM, VIPER 등.. 사용하려는 목적에 따라 디자인 패턴을 정해서 사용하는데, 그 중 모바일 어플(특히나 애.. dmsitter.tistory.com Quizzler 어플의 이해와 수정을 쉽게 하기위해 MVC design pattern 을 이용할 것이다. 먼저, quiz array를 Viewcontroller.swift가 아닌 다른 곳으로 옮겨줄 건데, Question.swift - 우클릭 - New Group from Selection 을 선택해준다..

Today I Learned 2021.06.29

20210627 Quizzler project -3

어플 사용자가 선택한 정답과 실제 정답을 비교해서 print되도록 코드를 작성했었는데, 정답 / 오답 여부에 따라 버튼의 backgroundcolor가 달라지도록 수정할 것이다. if userAnswer == actualAnswer 문의 코드블럭만 수정한다면, 다음 질문으로 넘어갔을 때도 변경된 backgroundColor으로 유지되기 때문에 다음 질문으로 넘어갈 때 backgroundColor가 다시 clear로 변경될 수 있도록 func updateUI() 부분의 코드도 수정했다. 두 가지의 방법으로 코드를 작성해보았다. 1. DispatchQueue 사용 if userAnswer == actualAnswer { // UIcolor == 미리 build되어 있는 color sender.backgrou..

Today I Learned 2021.06.27

20210623 Quizzler project -2

https://dmsitter.tistory.com/109 Swift - structure (구조체) Structure (구조체) : string, int, float, double, boolean, array, dictionary와 같이 미리 빌드된 자료형 외에 custom 자료형을 만들 수 있게 해준다. 미리 빌드된 다른 자료형과 마찬가지로, structure의 이.. dmsitter.tistory.com structure를 먼저 공부하고 와서 Quizzler app을 마저 만들어본다. 지난번에 2차원배열을 통해 만들었던 quiz 문항들을 structure 로 만든 퀴즈 배열로 바꿀 것이다. 먼저, 구조체를 만들기 위해 새 파일을 만들건데, 'File - New - File'을 통해 만들거나, 원하는..

Today I Learned 2021.06.24

20210616 Quizzler project -1 & 2D array

먼저, main.storyboard에 있는 question label, true button, false button, progress bar를 viewcontroller.swift에 각각 IBOutlet으로 연결시킨다. 그리고, true/false button에 대해 IBAction을 만들어준다 (type:UI button) Challenge ) Main.storyboard - attributes inspector를 건드리지 않고, 어플이 실행되었을 때 첫 화면에 questionLabel의 내용이 'Question Text'가 아닌, 다른 Question이 뜨도록 코드를 수정할 것 -> viewdidload() 코드블럭에 questionLabel.text = "2 + 4 = 6" 작성함 ---- IBO..

Today I Learned 2021.06.17

20210615 Egg Timer project -6 & Debug

지금까지 만든 Egg timer는 사용자의 입장에서 타이머, 즉 남은 시간이 보이지 않았다. 어플 사용자에게 남은 시간이 출력되도록 어플을 수정할건데 ProgressView를 사용할 것이다. 먼저 Library - Progress View를 추가해준다. 이것을 사용하면 Done이 뜨기까지의 퍼센티지를 보여줄 수 있게 된다. Timer View 아래에 추가하고, Constraints를 왼쪽 0, 오른쪽 0, 그리고 Alignment constraints를 vertically in container로 준다 높이(두께) 값을 부여하기 위해 Attributes inspector - style - Bar로 변경한 다음 constaints - Height - 5 px을 부여한다. Progress Tint / Tra..

Today I Learned 2021.06.15

20210614 - Egg Timer project -5

Challenge에서 작성했더너 코드를 테스트했을 때 잘 작동되는 듯 했으나 사실은 문제점이 있었다. 버튼을 눌렀을 때 타이머가 정상적으로 작동하는 듯 했으나 다른 버튼을 다시 눌러보면, 타이머가 내가 원했던 시간 간격대로 (1초에 한 번) 출력되지 않고 더 빠르게 출력되는 것을 확인할 수 있었다. 추가로 버튼을 누를 때마다 카운터가 출력되는 시간 간격은 계속해서 빨라졌다. 원인은 버튼을 누를 때마다 새로 타이머가 생성되고, 기존의 타이머를 멈추지 않았기 때문이다. 이 문제점을 해결하기 위해 IBAction 코드블럭의 앞부분에 타이머를 무효화시키는(멈추는) 코드를 작성해야 한다. 1. timer 변수 추가 2. timer = Timer.scheduledTimer~~~ 3. 코드 앞에 timer.inval..

Today I Learned 2021.06.15

20210613 - Egg Timer project -4

Challenge ) Countdown Timer 도입하기 1. 60초 카운트다운 타이머를 만드는 방법을 찾는다. 매 초마다 남은 시간이 출력되도록 한다. 2. Egg timer 어플에 있는 어떤 버튼을 누르면 countdown timer가 실행되도록 한다. 3. dictionary를 초 단위로 수정한다. (300 seconds..) import UIKit class ViewController: UIViewController { let eggTimes = [ "Soft" : 300, "Medium" : 420, "Hard" : 720 ] var counter : Int? @IBAction func hardnessSelected(_ sender: UIButton) { let hardness = sender..

Today I Learned 2021.06.14