iOS

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 20. 프로퍼티 감시자
프로퍼티 감시자 - 프로퍼티 감시자를 사용하면 프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있음 - 값 변경 전 : willSet블럭 호출 -> 암시적 매개변수인 newValue 사용 - 값 변경 후 : didSet블럭 호출 -> 암시적 매개변수인 oldValue 사용 - 둘 중 하나만 구현해도 됨 - 변경되는 값이 기존 값이랑 같아도 프로퍼티 감시자는 동작함 (값 변경으로 판단하는 게 아닌가 봄) - 연산 프로퍼티에는 사용할 수 없음 - 함수, 메소드, 클로저, 타입 등의 지역/전역 변수에 모두 사용 가능 위 코드에서 암시적 매개변수 존재를 어떻게 어떤 상황에서 쓰는지 주목하자. 그리고 willSet과 didSet이 어느 타이밍에서 어떻게 구현되는지도 주목하자.
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 19. 프로퍼티
프로퍼티 - 종류 : 인스턴스 저장 프로퍼티, 인스턴스 연산 프로퍼티, 타입 저장 프로퍼티, 타입 연산 프로퍼티, 지연 저장 프로퍼티 - 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있음 - 열거형 내부에는 연산 프로퍼티만 구현 가능 - 연산 프로퍼티는 var로만 선언 가능 - 연산 프로퍼티를 읽기 전용으로는 구현할 수 있으나, 쓰기 전용으로는 구현 불가능 - 읽기 전용으로 구현하려면 get 블럭만 작성해주면 됨. 읽기 전용은 get 블럭 생략 가능 - 읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set 블럭을 모두 구현해주면 됨 - set 블럭에서 암시적 매개변수 newValue를 사용할 수 있음 struct Student { //인스턴스 저장 프로퍼티 var name: String="" ..
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 18. 클로저 고급
클로저 고급 - 다양한 클로저 표현 1. 후행 클로저 : 함수의 매개변수 마지막으로 전달되는 클로저는 후행 클로저(trailing closure)로 함수 밖에 구현할 수 있음 2. 반환 타입 생략 : 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입 생략 가능 3. 단축 인자 이름 : 전달 인자의 이름이 굳이 필요 없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달 인자 이름 사용. how? $0, $1, $2 ... 4.암시적 반환 표현 : 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략하더라도 반환 값으로 취급 기본 클로저 표현 //클로저를 매개변수로 갖는 함수 calculated) func calculate(a:Int, b:Int, m..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 17. 클로저 기본
클로저 - 실행 가능한 코드 블럭 - 함수와 다르게 이름 정의는 필요하지 않음. 하지만 매개변수 전달과 반환 값이 존재할 수 있다는 점이 동일. - 함수는 이름이 있는 클로저라고 보면 됨 - 일급 객체로 전달인자, 변수, 상수, 등에 저장 및 전달이 가능 기본 클로저 문법 - 클로저는 중괄호 { }로 감싸져있음 - 괄호를 이용해 파라미터를 정의 - -> 을 이용해 반환 타입 명시 - 'in' 키워드를 이용해 실행 코드와 분리 { (매개변수) -> 반환타입 in 실행 코드 } 클로저 사용 sum이라는 상수에 클로저를 할당했다. { } 안에 있는 것이 클로저고, a+b를 할당한 것임. sumResult라는 상수에 클로저가 담겨있는 sum을 할당했고 값으로 3이 도출됨 함수의 전달인자로서의 클로저 - 클로저는..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 16. 클래스 vs 구조체 / 열거형
값 타입과 참조 타입 클래스 : 참조 타입 (Reference Type) -> 데이터를 전달할 때 값의 메모리 위치를 전달 구조체, 열거형 : 값 타입 (Value Type) -> 데이터를 전달할 때 값을 복사하여 전달 값 타입과 참조 타입이 어떻게 다른지 코드를 통해 확인해보자 값 타입을 사용하는 경우 -연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶은 경우 -다른 객체 또는 함수 등으로 전달될 때 참조가 아니라 복사할 경우 -자신을 상속할 필요가 없거나, 다른 타입을 상속받을 필요가 없는 경우 스위프트에서의 사용 -스위프트의 기본 데이터 타입은 모두 구조체로 구현되어 있다. -스위프트는 구조체와 열거형 사용을 선호한다. -Apple 프레임워크는 대부분 클래스를 사용한다. -구조체/클래..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 15. 열거형
열거형 enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 ... } 열거형 사용 rawValue (원시값) 정수 타입 뿐만 아니라, Hashable 프로토콜을 따르는 모든 타입을 원시값의 타입으로 지정할 수 있다. case university의 원시값을 우리가 지정해주지 않았다. 정수값도 아니기에 자동으로 1씩 증가하지도 않는다. 이 상황에서 university의 rawValue값을 부르면 어떤 결과가 나올까? 에러가 발생하는 것이 아니고, case의 이름을 원시값으로 사용한다. 원시값을 통한 초기화 rawValue를 통해 초기화한 열거형 값은 옵셔널 타입이다. 그래서 Fruit? 라고 써줘야 한다. 안그럼 에러 발생 if let 구문을 사용하면 rawValue에 해당하..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 14. 클래스
클래스 구조체와 클래스는 매우 유사하나 구조체는 '값 타입'인 반면 클래스는 '참조 타입'이다. class 클래스 이름{ 구현부 } //struct와 문법은 똑같다 class에서 func을 선언하는 부분 중 타입 메소드에서 두 가지가 존재한다. static func은 나중에 상속시 재정의가 불가능하고, class func은 나중에 상속시 재정의가 가능하다. 클래스 사용 class의 특징 let으로 인스턴스를 생성하더라도, class의 가변 프로퍼티는 수정이 가능하다. 하지만 불변 프로퍼티는 수정 불가능하다. 예시로 학생 클래스를 만들어보자! 점점 클래스, 프로퍼티, 인스턴스 ... 이런 거에 대한 감이 잡혀가는 것 같기도 하고 .. 약간 장고에서 models.py 같은 파일에서 클래스를 가져와 우리가 다..

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 13. 구조체
구조체 프로퍼티 : 구조체 내의 변수 및 상수 (var : 가변 프로퍼티, let : 불변 프로퍼티, static var : 타입 프로퍼티) 메소드 : 구조체 내의 함수 (func : 인스턴스 메소드, static func : 타입 메소드) struct 구조체 이름 { //구현부 } 구조체 사용 타입 자체를 불러올 때랑 그냥 프로퍼티를 불러올 때를 잘 구분하자 ... 타입, 인스턴스, 프로퍼티 이 개념들이 넘 헷갈린다 예시로 학생 구조체를 만들어보자!