전체 글 141

swift - Functions with Output

function에는 기본적으로 1. 아무런 input이 들어가지 않는 타입과, 2. 특정 input을 받는 타입, 3. 그리고 output이 있는 타입이 있다. 각각의 생성과 호출을 예시로 살펴보면 다음과 같다. 1. func greeting1() { print("Hello") } greeting1() 2. func greeting2(name : String) { print("Hello \(name)") } greeting2(name : "Jack") 3. 생성에는 func, function name, input type과 더불어 return arrow (->)와 return type도 필요하다. 함수의 코드블럭 내에 return keyword와 return value 또한 필요하다. 함수를 호출할 때도..

iOS/swift 2021.06.29

MVC Design pattern

Design pattern에는 여러가지가 있다. Object Pool, Facade, MVP, Iterator, Singleton, MVC, Memento, MVVM, VIPER 등.. 사용하려는 목적에 따라 디자인 패턴을 정해서 사용하는데, 그 중 모바일 어플(특히나 애플)을 만들 때 반드시 알아야 하는 디자인 패턴 중의 하나인 MVC design pattern에 대해 정리한다. MVC (Model-View-Controller) 프로젝트를 3개의 메인요소로 나눈다 - model / view / controller 그리고 각 요소들이 함께 작동하도록 한다. Model - 모든 데이터를 처리하는 코드와 로직 부분 View - UI로 이동하고 user interaction을 처리하는 코드 Controller..

iOS/swift 2021.06.28

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

Swift - structure (구조체)

Structure (구조체) : string, int, float, double, boolean, array, dictionary와 같이 미리 빌드된 자료형 외에 custom 자료형을 만들 수 있게 해준다. 미리 빌드된 다른 자료형과 마찬가지로, structure의 이름도 대문자로 시작해야 한다. - Town 위의 그림과 같이 변수를 하나 만들어서 보관한 후에, 사용하거나 각종 속성에 접근하여 여러가지 작업을 할 수 있게 되었다. myTown.citizens.append("Gaga") -- append로 새로운 항목을 추가할 수도 있고, myTown.citizens.count -- count로 항목의 갯수를 확인하거나 사용할 수도 있다. 또한, 구조체 내에 함수를 만들 수 있는데 이 함수를 method ..

iOS/swift 2021.06.23

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