Swift 38

18. 프로퍼티 - iOS 프로그래밍을 위한 스위프트 기초

- 프로퍼티의 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 - 정의와 사용 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다. 다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 연산 프로퍼티는 var로만 선언할 수 있다. 연산프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없다. 읽기전용으로 구현하려면 get 블럭만 작성해주면 된다. 읽기전용은 get블럭을 생략할 수 있다. 읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set블럭을 모두 구현해주면 된다. set 블럭에서 암시적 매개변수 newValue를 사용할 수 있다. - 응용 - 지역변수 및 전역변수 저장 프로퍼티와 연산 프로퍼티의 기능은 함수..

17. 클로저 고급 - iOS 프로그래밍을 위한 스위프트 기초

클로저는 아래 규칙을 통해 다양한 모습으로 표현될 수 있다. 후행 클로저 : 함수의 매개변수 마지막으로 전달되는 클로저는 후행클로저(trailing closure)로 함수 밖에 구현할 수 있다. 반환타입 생략 : 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입을 생략할 수 있다. 단축 인자 이름 : 전달인자의 이름이 굳이 필요없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달인자 이름($0, $1, $2...)을 사용 할 수 있다. 암시적 반환 표현 : 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략하더라도 반환 값으로 취급한다. 기본 클로저 표현 // 클로저를 매개변수로 갖는 함수 calculated(a:b:method:)와 결과값을 저..

16. 클로저 기본 - iOS 프로그래밍을 위한 스위프트 기초

- 클로저 클로저는 실행가능한 코드 블럭이다. 함수와 다르게 이름정의는 필요하지는 않지만, 매개변수 전달과 반환 값이 존재 할 수 있다는 점이 동일하다. 함수는 이름이 있는 클로저이다. 일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능하다. - 기본 클로저 문법 클로저는 중괄호 { }로 감싸져있다. 괄호를 이용해 파라미터를 정의한다. -> 을 이용해 반환 타입을 명시한다. "in" 키워드를 이용해 실행 코드와 분리한다. { (매개변수 목록) -> 반환타입 in 실행 코드 } - 클로저 사용 - 함수의 전달인자로서의 클로저 클로저는 주로 함수의 전달인자로 많이 사용된다. 함수 내부에서 원하는 코드블럭을 실행 할 수 있다.

15. 클래스 vs 구조체 / 열거형 - iOS 프로그래밍을 위한 스위프트 기초

클래스는 참조 타입, 열거형과 구조체는 값 타입이라는 것이 가장 큰 차이이다. 클래스는 상속이 가능하지만, 열거형과 구조체는 상속이 불가능 하다. - 값 타입과 참조 타입 비교 값 타입(Value Type) : 데이터를 전달 할 때 값을 복사하여 전달한다. 참조 타입(Reference Type) : 데이터를 전달 할 때 값의 메모리 위치를 전달한다. - 값 타입을 사용하는 경우 연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶은 경우 다른 객체 또는 함수 등으로 전달될 때 참조가 아니라 복사(값 복사) 할 경우 자신을 상속할 필요가 없거나, 다른 타입을 상속 받을 필요가 없는 경우 - 스위프트에서의 사용 스위프트의 기본 데이터 타입은 모두 구조체로 구현 되어있다. 스위스트는 구조체와 열거형..

14. 열거형 - iOS 프로그래밍을 위한 스위프트 기초

- 열거형 Swift 열거형은 다른 언어의 열거형과 많이 다르다. 강력한 기능을 지니고 있어 잘 알아두고 사용하면 좋다. 유사한 종류의 여러 값을 한 곳에 모아서 정의한 것이다. 예) 요일, 월, 계절 등 enum 자체가 하나의 데이터 타입으로, 대문자 카멜케이스를 사용하여 이름을 정의한다. 각 case는 소문자 카멜케이스로 정의한다. 각 case는 그 자체가 고유의 값이다.(각 case에 자동으로 정수값이 할당되지 않음) 각 case는 한 줄에 개별로도, 한 줄에 여러개도 정의할 수 있다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ... } // 예제 enum BoostCamp { case iosCamp case androidCamp case webCam..

13. 클래스 - iOS 프로그래밍을 위한 스위프트 기초

- 클래스란? 클래스는 참조(reference) 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. Swift의 클래스는 다중 상속이 되지 않는다. - 클래스 문법 정의 : "class" 키워드 사용 class 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 구조체 - call by value 클래스 - call by reference 타입 메소드에는 상속시 재정의가 불가한 static 메소드와 재정의가 가능한 class 메소드가 존재한다. 클래스 사용 클래스의 인스턴스는 참조 타입이므로 let으로 선언되더라도 인스턴스 프로퍼티의 값 변경이 가능하다. - 학생 클래스 만들어 보기 struct와 같은 예제이다.

12. 구조체 - iOS 프로그래밍을 위한 스위프트 기초

- 구조체란? 스위프트 대부분 타입은 구조체로 이루어져 있다. 구조체는 값(value) 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. - 구조체 문법 구조체 정의 : "struct" 키워드 사용 //MARK: - 정의 struct { /* */ } 구조체 프로퍼티 및 메서드 구현 구조체 사용 불변 인스턴스 값을 바꿀 수 없다. 불변 인스턴스의 가변 프로퍼티 또한 바꿀 수 없다. 타입 프로퍼티는 struct에 호출한다. - 학생 구조체 만들어보기 class는 키워드 이지만 'class' (따옴표) 를 통해 변수로 선언할 수 있다. class와 struct 구분하기는 다음에 !

11. 옵셔널 추출 - iOS 프로그래밍을 위한 스위프트 기초

- 옵셔널 추출이란? 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것 - 옵셔널 방식 옵셔널 바인딩 1. nil 체크 + 안전한 추출 2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내온다. 3. if-let 방식 사용 func printName(_ name: String) { print(name) } var myName: String? = nil //printName(myName) // 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생 if let name: String = myName { printName(name) } else { print("myName == nil") } var yourName: String! = nil if let name: String = yourName {..

10. 옵셔널 - iOS 프로그래밍을 위한 스위프트 기초

- 옵셔널이란?? 값이 있을 수도, 없을 수도 있음을 표현 nil이 할당 될 수 있는지 없는지 표현 // someOptionalParm에 nil이 할당 될 수 있다. func someFunction(someOptionalParam: Int?) { // .... } /// someOptionalParm에 nil이 할당 될 수 없다. func someFunction(someOptionalParam: Int) { // .... } someFunction(someOptionalParam: nil) // someFunction(someParam: nil) - 옵셔널을 쓰는 이유 명시적 표현 1. nil의 가능성을 코드만으로 표현가능 2. 문서/주석 작성 시간 절약 안전한 사용 1. 전달받은 값이 옵셔널이 아니라면..

9. 반복문 - iOS 프로그래밍을 위한 스위프트 기초

for-in while repeat-while - for in 구문 기존 언어의 for-each 구문과 유사하다. Dictionary의 경우 이터레이션 아이템으로 튜플이 들어온다. var integers = [1, 2, 3] let people = ["kdgt": 10, "eric": 15, "mike": 12] for integer in integers { print(integer) } // Dictionary의 item은 key와 value로 구성된 튜플 타입이다 for (name, age) in people { print("\(name): \(age)") } - while 구문 while integers.count > 1 { integers.removeLast() } - repeat-while 구문..