Toy Project 81

4. Outlet 연결

화면에 레이블이 있고, 버튼이 클릭될 때마다 이 레이블의 값이 변경되고 하고 싶다면? 레이블은 보여지는 text라고 이해하면 쉽다. 그리고 코드와 연결하여 이 값을 바꾸는 작업을 하는 것이다. 다음 코드와 같이 priceLabel을 Outlet으로 설정하며, viewDidLoad()는 해당 ViewController화면이 load될때 실행되는 함수이다. priceLabel.text를 해당 문자열로 삽입하였기에, view가 load될때 해당 레이블이 숫자로 지정된 $100000가 아닌 코드로 수정해준 “$\(currentNumber)” 로 변경되어 출력된다. 그러나, load가 된 다음 currentNumber의 값이 바뀌더라도 해당 text로 load 가 되었기에 숫자는 바뀌지 않는다. 어떻게 코드 구조..

3. 앱동작 방식의 이해

앱은 여러 개의 object로 이루어져 있다. 우리가 본 object는 UI버튼, UI label, ViewController 등이 있다. 제공되는 것은 쓰면 되고 제공되지 않는 것은 만들어야 한다. 기본적으로 object들은 메세지를 보내면서 communication을 한다. 사용자가 버튼을 누르면 버튼은 ViewController에게 버튼이 클릭되었다고 알려준다. 그럼 VC는 showAlert method를 수행을 하고, UIAlertController에게 메세지를 보낸다. 이렇게 object간의 메세지를 보내게 되는데 IOS앱 자체는 이벤트발생에 따라 작동한다. 버튼클릭이라는 이벤트가 VC에게 메세지로 전달되고, 이는 그 안의 함수에게 또 메세지를 보내는 그러한 방식이다. 이 말은 즉, 앱은 항상 ..

2. ViewController을 통해 화면출력

@IBAction func hello(_ sender: Any) { let alert = UIAlertController(title: "hello", message: "My First App!!", preferredStyle: .alert) let action = UIAlertAction(title: "OK", style: .default, handler: nil) alert.addAction(action) present(alert, animated: true, completion: nil) } UIAlertController로 팝업을 만들게 되고 제목과 메세지를 입력한다. 그후 밑의 버튼은 UIAlertAction으로 만들게 되고 버튼이름은 설정가능하다. 버튼을 누르면 어떤 기능을 할지는 handler..

1. ViewController: 스크린 하나를 관리함

우리가 게시판을 만든다고 하고 게시판리스트와 게시판상세페이지 이렇게 두개의 스크린이 있다고 하면 우리는 두개의 ViewController가 필요하다. (페이지가 복잡해지면 하나의 스크린에 여러개의 ViewController를 사용하기도 함) ViewController는 2가지로 구성된다. 페이지를 디자인하는 파트 Storyboard와 연결되어 있는 코드파트로 구성된다. 그렇다면 ViewController는 무엇을 하는 것일까? 쉽게 설명하면 우리는 StoryBoard에 원하는 object library를 사용해서 적절한 디자인을 할 것이다. 그러면 버튼(레이블 등)은 지금까지 아무것도 아닌 상자일 뿐이다. 그런데 이 버튼을 눌렀을 때 어떤 반응이나 실행이 되도록 우리가 코드를 짜게 되는데, 그것이 Vie..

16. Swift Initializer(생성자)

목차 자식클래스가 새로운 형태로 Initializer를 만드는 방법 2-phase Initialization (클래스 생성시 2단계) 상속이 깊어지면 Initializer에 전달하는 파라미터의 갯수도 늘어난다. 규칙 code 1. 자식클래스가 새로운 형태로 Initializer를 만드는 방법 init(firstName: String, lastName: String, sports:[String]){ self.sports = sports super.init(firstName:firstName, lastName:lastName) // 여기서 Stored Property를 먼저 초기화한 다음에 상위 클래스의 생성자를 호출하는 것이 관례이다. 이유는 2에서 알려줄께 } // 이렇게 되면 해당 클래스의 생성자에 맞..

15. Swift Class Inheritance (상속)

상속의 규칙 A is B -->명제가 논리적으로 성립하면 A는 B를 상속 받을 수 있다. 자식은 한 개의 superclass만 상속받는다. 부모는 여러 자식들을 가질 수 있다. 상속의 깊이는 상관없다. override: 오버라이딩 메소드의 경우 override 키워드를 삽입한다. upper casting: 상위클래스로 casting할 때, 명시적으로 (as 클래스이름) 표시할 수 있다. athelete1 = athelete2 as StudentAthlete 여기서 upper casting가 되었기에 athelete1은 이제 footballTeam에 접근할 수 없다. down casting: 하위클래스로 casting할 때이며, 안전하게 optional하게 casting된다. 정상적으로 binding가 된..

14. Swift Class

Struct와 Class를 정의하면서 차이를 살펴보자 Structure는 property의 값 변경을 만드는 함수는 mutating 키워드를 이용해야한다. Class의 경우 할당될 때 실행되는 생성자를 선언해야 한다. Structure도 생성자 init()를 정의할 수 있다. struct PersonStruct { var firstName: String var lastName: String var fullName: String { return "\(firstName) \(lastName)" } init(firstName: String, lastName: String){ self.firstName = firstName self.lastName = lastName } mutating func uppercas..

13. Swift Method extension

이미 만든 Structure에 메소드를 추가하고 싶다. instance, type 이던 method를 추가할 수 있다. 기존의 structure에서 코드를 추가해도 되지만 현재 코드라인에서 사용하고 싶으면(이게 가독성이 좋겠다라고 생각되면) extansion을 이용해도 된다. 그리고 협업시 모든 사람들이 해당 Structure에 접근하면 오류가 커질 수 있기에 각각 추가 코드라인을 만들어서 정상적으로 디버깅되면 추가하는 것도 좋은 방법이다. struct Math { static func abs(value: Int) -> Int { if value > 0 { return value } else { return -value } } } print(Math.abs(value: -20)) // 제곱, 반값이 필요..

12. Swift Method

function과 method의 차이: method는 instance에 귀속되어서 사용할 수 있는 것 function과 마찬가지로 기능을 수행하는 코드블록이다. function과 다르게 Structure, Class안에서 동작하는 것 이번에는 Structure와 관련된 Method에 대해 알아보자 struct Lecture { var title: String var maxStudents: Int = 10 var numOfRegistered: Int = 0 // 강의의 남은 자리수 확인하는 함수 func remainSeats() -> Int { return lec.maxStudents - lec.numOfRegistered } // swift는 var 변수라도 함부로 값을 변경하면 안된다. // func ..

11. Swift Property(속성)

Property: 속성, 데이터를 의미 Stored Property: 값이 초기화되어 저장되어있는 데이터(nil로 저장된것도 포함) Computed Property: 어떤 값을 저장하지 않고 저장된 정보를 이용해서 가공 혹은 계산된 값을 이용 접근할때마다 다시 계산이 되어 값 변경시 새로운 값을 이용해서 다시 제공한다. Protocol에서의 예시인 var description이 Computed Property이다. 꿀팁을 주자면 변수가 var로 되어있는데 값변경으로인한 오류를 막기위해 let으로 선언을 권고 struct Person { var firstName: String var lastName: String var fullName: String { return "\(firstName) \(lastNa..

10. Swift Protocol

Protocol: 규약, 약속 꼭 구현되어야하는 method나 Property(속성) 같은것들이다. 즉, 어떤 서비스를 이용할 때 반드시 필요한 것들이 있을 것인데, 프로토콜을 서비스에서 반드시 필요한 일, 요소들을 의미한다. Integer 도 Structure로 구성되어 있다. public struct Int : FixedWidthInteger, SignedInteger 여기서 FixedWidthInteger, SignedInteger 이 프로토콜이라는 놈들이다. public protocol CustomStringConvertible { public var description: String {get} } 여기서 CustomStringConvertible이 protocol이라고 선언이 되면 내부에 있는..

9. Swift Structure practice

// 도전과제 // 1. 강의이름, 강사이름, 학생수를 가지는 구조체 만들기 (Lecture) // 2. 강의 array와 강사이름을 받아서, 해당 강사의 강의이름을 출력하는 함수만들기 // 3. 강의 3개를 만들고, 강사이름으로 강의찾기 struct Lecture { let lectureName: String let lectureTeacher: String let numOfStudent: Int } let lec1 = Lecture(lectureName: "OS", lectureTeacher: "김호원", numOfStudent: 40) let lec2 = Lecture(lectureName: "Database", lectureTeacher: "이기준", numOfStudent: 50) let lec3..