분류 전체보기 260

6. Styling, Auto Layout

Styling Image and Labels Styling Button Auto Layout : 다양한 해상도의 디바이스 대응하는 방법 App Icon and Display name … Image 아이폰은 3가지 사이즈의 이미지를 받아서 사용할 수 있다. 1x, 2x, 3x 는 해상도를 의미한다. 해당 사진이 어떤 해상도를 갖는지 알려줄 수 있다. @2x 이렇게 사진을 넣게되면 해상도에 맞게 사진이 지정된다. Image view에서 가볍게 GUI로 지정해서 사진을 선택할 수 있다. Assets.xcassets에 넣은 사진이나, 애플에서 제공하는 아이콘들을 사용할 수 있다. 여기서 사진이 꽉 차지 않을 경우 View에서 Content mode를 Aspect Fit이 아닌 Aspect Fill로 하면 사이즈..

5. Swift를 배우기전 알아야할 코딩지식

string는 “ ”안에서 변수를 사용할 수 있다. “가격은 \(variable) 입니다.” —> 변수에 해당하는 값이 적절히 출력된다. arc4random_uniform(10000) : 0~9999 까지의 수를 랜덤하게 반환한다. 단, 해당 반환된 수는 UInt32 type 이기에 연산시 Int로 type cast를 실행하자. var를 이용해서 만드는 변수를 variable라고 한다. let를 이용해서 만드는 변수를 constant라고 한다. var 은 변수를 담고, let은 const와 같이 변하지 않는 문자열, 상수 등을 이용한다. —> 될수 있으면 오류를 방지하지 위해 let을 많이 사용하도록 하자. let을 이용해서 constant를 생성하고, 변경이 필요한 경우에 키워드를 바꿔서 사용하는 것을..

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에서 알려줄께 } // 이렇게 되면 해당 클래스의 생성자에 맞..

3. 상속은 언제 하면 좋은가?

장점: 중복되는 코드가 줄어든다. 단점: depth가 깊어지면 복잡하다. 짬에서 나오는 철학이 필요하다. Single Responsibility (단일 책임): 각 클래스는 한 개의 고려사항만 있으면 된다. -> 여러 책임을 다 가지려하면 복잡해진다. Type Safety (타입이 분명해야 할 때): 클래스 간의 명확한 구분이 필요한 경우 -> 학교 축구동아리에서 축구선수를 뽑으려고 하는데 미술부, 과학부 같이 너무 아무나 들어오게 하고 싶지 않아서 운동부 애들로 제한을 두고 싶어서 상속을 한다. Shared Base Classes(다자녀가 있다!): 기본 동작이 다양하게 구분되어야 하는 경우 -> 학생이 학습을 하는 기능이 있다면, 미술학생은 미술공부를 학습하고 체육학생은 운동공부를 학습하는 것과 같이..

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가 된..

2. Struct vs. Class

목차 1. Struct와 Class의 차이 2. 언제 Struct를 사용하는가 3. 언제 Class를 사용하는가 4. 현업 개발자의 추천 1. Struct와 Class의 차이 변수 할당할 때 차이가 생긴다. Class는 이미 할당된 변수를 새로운 변수로 할당할 때 새로운 변수는 기존의 변수를 지칭하고 있다. Structure는 복사가 된다. 이렇게 동작의 차이가 생기는 이유는 뭘까? 두 타입이 생성되는 인스턴스가 컴퓨터 안에서 할당되는 메모리 공간의 차이가 있기 때문이다. Class 는 Heap영역에, Structure는 Stack영역에 할당된다. 각 영역은 다른 속성을 갖고 있다. Stack은 시스템에서 당장 실행하거나 타이트하게 control, managing해야하는 놈들은 stack에 할당한다. 그..

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)) // 제곱, 반값이 필요..