본문 바로가기

반응형

IOS

(21)
swift - 익스텐션 extension by yagom 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 익스텐션으로 추가할 수 있는 기능: 연산 타입 프로퍼티, 연산 인스턴스 프로퍼티, 타입 메서드, 인스턴스 메서드, 이니셜라이저, 서브스크립트, 중첩 타입, 특정 프로토콜을 준수할 수 있도록 기능 추가 기존에 존개하는 기능을 재정의 할 수는 없다. extension 확장할 타입 이름{ 타입에 추가될 새로운 기능 구현 } 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있다. extension 확장할 타입 이름: 프로토콜1, 프로토콜2, ..
swift - 프로토콜 by yagom v프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 '프로토콜을 준수한다.(Conform)'고 표현한다. 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 기능을 모두 구현해야 한다. 쉽게 말하면 어떤 타입(구조체등)에 "넌 특정 기능이 꼭 필요하니 무조건 구현해라"라는 것 protocol 프로토콜 이름{ 정의 } protocol Talkable{ // 프로퍼티 요구 // 프로퍼티 요구는 항상 var 키워드를 사용한다. // get은 읽기만 가능해도 상관 없다는 뜻이며 // get과 set을 모두 ..
swift - assert와 guard by yagom 애플리케이션이 동작 도중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있도록 도와주는 기능 assertion 조건들을 가지고 어떤 결과를 확인하는데 사용할 수 있다. assert(_:_:file:line:) 함수를 사용한다. assert 함수는 디버깅 모드에서만 동작한다. 배포하는 애플리케이션에서는 제외된다. 주로 디버깅 중 내가 예상했던 조건의 검증을 위해서 사용된다. var someInt: Int = 0 aseert(someInt == 0, "someInt != 0") // someInt가 0인 경우 출력되는 값 없이 지나가지만 거짓인 경우 문자열을 출력한 후 디버깅을 중지한다. someInt = 1 // assert(someInt == 0) //..
swift - 타입캐스팅 by yagom 스트프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도로 사용한다. is, as를 사용한다. /* let someInt: Int = 100 let someDouble: Double = Double(someInt) # C언어 및 다른 대부분의 언어에서 사용하는 방법 // 이 방법은 스위프트에서는 타입캐스팅이 아닌 Double타입의 인스턴스를 하나 더 생성하는 것이다. */ // 타입 캐스팅을 위한 클래스 정의 // 상속을 활용한 부모와 자식 클래스 class Person{ var name: String = "" func breath(){ print("숨을 쉽니다.") } } class Student: Person{ ..
swift - 옵셔널 체이닝과 nil 병합 연산자 by yagom 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또다시 옵셔널이 연속적으로 연결되는 경우 유용하게 사용할 수 있다. 구조체 안에 구조체 또 구조체 안에 구조체가 있을때 변수가 nil인지 아닌지를 확인해야 할 경우가 생긴다. class Person { var name: String var job: String? var home: Apartment? # 옵셔널(Obtional) init(name: String){ slef.name = name } } class Apartment{ var buildingNumber: String var roomNumber: String var 'guard': Person? var owner: Person? init(dong: String, ho: String){ building..

반응형