본문 바로가기

# 02/Swift

[Swift] assert와 guard 애플리케이션이 동작 도중에 생성하는 다양한 결과값을동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있다. Assertion - assert(_:_:file:line:) 함수를 사용한다. - assert 함수는 디버깅 모드에서만 동작한다. - 배포하는 애플리케이션에서는 제외된다. - 주로 디버깅 중 조건의 검증을 위하여 사용한다. var someInt: Int = 0 assert(someInt == 0. "someInt != 0") someInt = 1// assert(someInt == 0) // 동작 중지, 검증 실패// assert(someInt == 0, "someInt != 0") // 동작 중지, 검증 실패// assertion failed: someInt != 0: fi..
[Swift] 타입캐스팅 스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인 하는 용도로 사용한다. is, as 를 사용한다. // 이것은 타입캐스팅이 아니다. someInt 를 받아서 새로운 인스턴스를 생성하는 것이다. // 실제로 Double init 에 보면 타입별로 여러가지가 있는 것을 알 수 있다. let someInt: Int = 100let someDouble: Double = Double(someInt) // 타입 캐스팅을 위한 클래스 정의 class Person { var name: String = "" func breath() {print("숨을 쉽니다")}} class Student: Person { var school: S..
[Swift] 옵셔널 체이닝과 nil 병합 연산자 옵셔널 체이닝 - 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또 다시 옵셔널이 연속적으로 연결되는 경우 유용하게 사용할 수 있다. class Person { var name: Stringvar job: String?var home: Apartment? init(name: String) {self.name = name}} class Apartment { var buildingNumber: Stringvar roomNumber: Stringvar `guard`: Person?var owner: Person? init(dong: String, ho: String) {buildingNumber = dongroomNumber = ho}} let joy: Person? = Person(name: "joy")le..
[Swift] 인스턴스의 생성과 소멸 인스턴스의 생성과 소멸 이니셜라이저와 디이니셜라이저 - init, deinit - 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. - 프로퍼티에 미리 기본값을 할당해두면 - 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. class PersonA { // 모든 저장 프로퍼티에 기본값 할당 필요!! 안되면 컴파일 에러 뜸var name: String = "joy"var age: int = 10} let jason: PersonA = PersonA()jason.name = "jason"jason.age = 30 // 이니셜라이저// 프로퍼티 기본값을 지정하기 어려운 경우에는// 이니셜라이저를 통해// 인스턴스가 가져야 할 초기값을 전달할 수 있다. class ..
[Swift] 상속 상속 - 스위프트의 상속은 클래스, 프로토콜 등에서 가능하다. - 열거형, 구조체는 상속이 불가능하다. - 스위프트는 다중상속을 지원하지 않는다. - 이번 파트에서는 클래스의 상속에 대해서 알아본다. class 이름: 상속받을 클래스 이름 { 구현부} class Person { var name: String = "" func selfIntroduce() {print("저는 \(name)입니다") } // final 키워드를 사용하여 재정의를 방지할 수 있다.final func sayHello() {print("hello")} // 타입 메서드// 재정의 불가 타입 메서드 - staticstatic func typeMethod() {print("type method - static")} // 재정의 가능 ..
[Swift] 프로퍼티 감시자 프로퍼티 감시자 - 프로퍼티 감시자를 사용하면 프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있다. struct Money { // 프로퍼티 감시자 사용var currencyRate: Double = 1100 {willSet(newRate) {print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다.")}didSet(oldRate) {print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다")}} // 프로퍼티 감시자 사용var dollar: Double = 0 {// willSet의 암시적 매개변수 이름 newValuewillSet {print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다")} // did..
[Swift] 프로퍼티 프로퍼티 - 저장 프로퍼티(stored property) - 연산 프로퍼티(computed property) - 인스턴스 프로퍼티(instance property) - 타입 프로퍼티(type property) // 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다.// 다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다.// 연산 프로퍼티는 var 로만 선언할 수 있다. struct Student { // 인스턴트 저장 프로퍼티var name: String = ""var `class`: String = "Swift"var koreanAge: Int = 0 // 인스턴스 연산 프로퍼티var westernAge: Int {get {return koreanAge - 1}set(inputValue) ..
[Swift] 클로저 고급 클로저 고급 - 후행 클로저 - 반환타입 생략 - 단축 인자이름 - 암시적 변환 표현 func calculate(a: Int, b: Int, method: (Int, Int) -> Int ) -> Int {return method(a, b)} var result: Int // 기본 result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) -> Int inreturn left + right}) // 후행 클로저// 클로저가 함수의 마지막 전달인자라면// 마지막 매개변수 이름을 생략한 후 // 함수 소괄호 외부에 클로저를 구현할 수 있다. result = calculate(a: 10, b: 10) { (left: Int, right: Int) -..