분류 전체보기 (50) 썸네일형 리스트형 Swift의 타입 캐스팅 1. 스위프트 타입 캐스팅 •인스턴스의 타입을 확인하는 용도 •클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 •is, as를 사용 * 형변환은 'ex. let someDouble = Double(2)' 타입 캐스팅이 아니라 새로운 값을 생성하는 것 2. 예제 클래스 1234567891011121314151617181920class Person { var name: String = "" func breath() { print("숨을 쉽니다") }} class Student: Person { var school: String = "" func goToSchool() { print("등교를 합니다") }} class UniversityStudent: Student { v.. Swift의 옵셔널 체이닝과 nil 병합 연산자 1. 옵셔널 체이닝 •옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있음 •매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있음 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778// 예제 클래스// 사람 클래스class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name }}// 사람이 사.. Swift의 인스턴스의 생성과 소멸 •프로퍼티 초기값•이니셜라이저 init - 인스턴스를 생성•디이니셜라이저 deinit - 클래스의 인스턴스가 소멸될 때 호출됨 1. 프로퍼티 초기값 •스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 함 •프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됨 123456789101112131415class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick"} // 인스턴스 생성let jennie: PersonA = PersonA() // 기본값이 인스턴스가 지녀야 할 값과 맞지 않다면// 생성된 인스.. Swift의 상속 1. 스위프트 상속 •상속은 클래스, 프로토콜 등에서 가능 •열거형, 구조체는 상속이 불가능 •스위프트의 클래스는 단일상속으로, 다중상속을 지원하지 않음 2. 문법 123class 이름: 상속받을 클래스 이름 { /* */}cs 3. 사용 •final 키워드를 사용하면 재정의(override)를 방지할 수 있음 •static 키워드를 사용해 타입 메서드를 만들면 재정의가 불가능 •class 키워드를 사용해 타입 메서드를 만들면 재정의가 가능 •class 앞에 final을 붙이면 static 키워드를 사용한 것과 동일하게 동작 •override 키워드를 사용해 부모 클래스의 메서드를 재정의 할 수 있음 1234567891011121314151617181920212223242526272829303132333.. Swift의 프로퍼티 감시자 1. 프로퍼티 감시자 •프로퍼티 감시자를 사용하면 프로퍼티의 값이 변경될 때 원하는 동작을 수행할 수 있음 •값이 변경되기 직전에 willSet 블럭이, 값이 변경된 직후에 didSet 블럭이 호출됨 •둘 중 필요한 하나만 구현해 주어도 무관 •변경되려는 값이 기존 값과 똑같더라도 프로퍼티 감시자는 항상 동작 •willSet 블럭에서는 암시적 매개변수 newValue를, didSet 블럭에서는 oldValue를 사용할 수 있음 •프로퍼티 감시자는 연산 프로퍼티에는 사용할 수 없음 •프로퍼티 감시자는 함수, 메서드, 클로저, 타입 등의 지역/전역 변수에 모두 사용 가능 2. 정의 및 사용 123456789101112131415161718192021222324252627282930313233343536373.. Swift의 프로퍼티 1. 프로퍼티의 종류 •인스턴스 저장 프로퍼티 •타입 저장 프로퍼티 •인스턴스 연산 프로퍼티 •타입 연산 프로퍼티 •지연 저장 프로퍼티 2. 정의와 사용 •프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있음 •다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있음 •연산 프로퍼티는 var로만 선언할 수 있음 •연산 프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없음 •읽기전용으로 구현하려면 get 블럭만 작성해주면 됨. 읽기전용은 get 블럭을 생략할 수 있음 •읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set 블럭을 모두 구현해주면 됨 •set 블럭에서 암시적 매개변수 newValue를 사용할 수 있음 12345678910111213141516171819202122.. Swift의 클로저 고급 클로저는 아래 규칙을 통해 다양한 모습으로 표현될 수 있음 1. 후행 클로저 : 함수의 매개변수 마지막으로 전달되는 클로저는 후행 클로저(trailing closure)로 함수 밖에 구현할 수 있음 2. 반환타입 생략 : 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입을 생략할 수 있음 3. 단축 인자 이름 : 전달인자의 이름이 굳이 필요없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달인자 이름($0, $1, $2 ..)을 사용할 수 있음 4. 암시적 반환 표현 : 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략하더라도 반환 값으로 취급 기본 클로저 표현 123456// 클로저를 매개변수로 갖는 함수 calculated(a:b:metho.. Swift의 클로저 1. 클로저 •클로저는 실행가능한 코드 블럭 •함수와 다르게 이름정의는 필요하지는 않지만, 매개변수 전달과 반환 값이 존재 할 수 있다는 점이 동일 •함수는 이름이 있는 클로저 •일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능 2. 기본 클로저 문법 •클로저는 중괄호 {}로 감싸져있음 •괄호를 이용해 파라미터를 정의 •-> 을 이용해 반환 타입 명시 •"in"키워드를 이용해 실행 코드와 분리 123{ (매개변수 목록) -> 반환타입 in /* 실행 코드 */}cs 3. 클로저 사용 1234567// sum이라는 상수에 클로저를 할당let sum: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b} let sumResult: Int = sum(1.. 이전 1 2 3 4 5 ··· 7 다음