목록Swift (56)
GGURUPiOS
Extensions (익스텐션) 익스텐션을 이용해 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가할 수 있음 원본 코드를 몰라도 그 타입에 대한 기능을 확장할 수 있음 → 이게 매우 큰 장점인듯. 익스텐션을 이용해 할 수 있는 것들 계산된 인스턴스,타입 프로퍼티 추가 인스턴스,타입 메소드 추가 새로운 이니셜라이저 제공 서브스크립트 정의 중첩 타입의 선언과 사용 특정 프로토콜을 따르는 타입 만들기 익스텐션 은 타입에 새 기능을 추가할 수 있지만 오버라이드는 불가능 익스텐션 문법 // extension 키워드 사용 (기본) extension SomeType { // new } // 프토토콜 채택 extension SomeType: SomeProtocol, AnotherProtocol { // im..
Nested Types (중첩 타입) 열거형은 특정 구조체나 클래스의 기능을 처리하기 위해 자주 사용됨 이와 비슷하게 특정 문맥에서 좀 더 복잡한 타입을 위해 사용할 수 있는 유틸리티 클래스나 구조체를 정의 가능 스위프트에서는 이 기능을 위해 중첩타입을 지원 함. 중첩타입 ? → 열거형, 클랫, 구조체를 그 타입 안에서 다시 정의할 수 있음 struct BlackjackCard { // nested Suit enumeration // struct 안에 enum이 들어갈 수 있습니다. enum Suit: Character { case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣" } // nested Rank enumeration enum Rank: I..
Type Casting(타입 캐스팅) 타입 캐스팅은 인스턴스의 타입을 확인하거나 인스턴스를 같은 계층에 있는 다른 슈퍼클래스나 서브클래스로 취급하는 방법임 타입캐스팅에는 is, as 두 연산자를 사용 타입 캐스팅을 위한 클래스 계층구조 선언 예제클래스 class MediaItem { var name: String init(name: String) { self.name = name } } class Movie: MediaItem { var director: String init(name: String, director: String) { self.director = director super.init(name: name) } } class Song: MediaItem { var artist: String ..
Concurrency ( 동시성 ) 스위프트는 구조화된 방식으로 비동기 및 병렬 코드 작성을 지원 함 비동기 코드는 일시 중지 했다가 나중에 재개할 수 있음 네트워크를 통해 데이터를 가져오거나 파일 구문 분석과 같은 장기 실행 작업을 하면서 UI 업데이트와 같은 단기 작업을 수행할 수 있음 병렬 또는 비동기 코드의 스케줄링 유연성은 복잡성 증가 비용과 함께 적용됨 스위프트의 언어지원을 사용하지않고 동시성 코드를 작성할 수 있지만 읽기 더 어려운 경향이있음 listPhotos(inGallery: "Summer Vacation") { photoNames in let sortedNames = photoNames.sorted() let name = sortedNames[0] downloadPhoto(named:..
Error Handling (에러 처리) 프로그램 실행시 에러가 발상하면 그 상황에 대해 적절한 처리가 필요함 스위프트는 런타임에 에러가 발생한 경우 그것의 처리를 위해 에러의 발생(throwing), 감지(catching), 증식(propagating), 조작(manipulating)을 지원하는 일급 클래스를 제공함 어떤 명령은 항상 완전히 실행되는 것이 보장되지 않는 경우가 있음 그런 경우에 옵셔널을 사용해 에러가 발생해 값이 없다는 것을 표시할 수 있지만 어떤 종류의 에러가 발생했는지 확인할 수는 없음 이럴 때는 구제적으로 발생한 에러를 확인할 수 있어야 코드를 작성하는 사람이 적절한 처리가 가능함 에러의 표시와 발생 스위프트에서 에러는 Error 프로토콜을 따르는 타입의 값으로 표현됨. 비어있는 ..
Optional Chaining (?) 옵셔널 체이닝은 nil일 수도 있는 프로퍼티나 메소드, 그리고 서브스크립트에 질의를 하는 과정 만약 옵셔널이 프로퍼티나 메소드 혹은 서브스크립트에 대한 값을 갖고 있다면 그 값을 반환, 만약 값이 nil이면 nil을 반환 함 강제 언래핑의 대체로써의 옵셔널 체이닝 옵셔널 체이닝은 옵셔널 값 뒤에 물음표를 붙여서 표현 가능 함 강제 언래핑하기 위해서 뒤에 느낌표를 붙이는 것과 문법이 비슷한데 강제 언래핑 → 그 값이 없으면 런타임 에러 옵셔널 체이닝 → nil 반환 예제를 살펴보자 class Person { var residence: Residence? } class Residence { var numberOfRooms = 1 } let john = Person() ..