일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- swiftUI
- uitableview
- 리팩토링
- HIG
- 스위프트
- combine
- Human interface guide
- 리펙터링
- rxswift
- ribs
- tableView
- Refactoring
- Protocol
- Observable
- uiscrollview
- MVVM
- map
- Xcode
- SWIFT
- 애니메이션
- clean architecture
- ios
- Clean Code
- swift documentation
- UICollectionView
- 클린 코드
- 리펙토링
- RxCocoa
- UITextView
- collectionview
- Today
- Total
목록swift 공식 문서 (27)
김종권의 iOS 앱 개발 알아가기
Nested Types 유형의 정의 내에서 enum, class, struct를 중첩하여, 순수한 타입으로 한번더 타입으로 정의하는 것 예시 Suit: 네 개의 일반적인 게임 카드 설명 Rank: 대부분의 카드는 한가지의 값을 갖지만 에이스 카드에는 두 개의 값이 있다는 것을 표현 struct BlackjackCard { // nested Suit enumeration enum Suit: Character { case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣" } // nested Rank enumeration enum Rank: Int { case two = 2, three, four, five, six, seven, eight, nine, te..
Type Casting instance의 유형을 확인하거나 해당 instance를 자체 클래스 계층 구조에서 superclass또는 subclass로 처리하는 방법 연산자는 두가지: is와 as Type 확인 is연산자 사용: 좌측엔 instance, 우측엔 type 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..
* 기초: Sync vs Async vs Serial vs Concurrency 개념 Concurrency Swift는 비동기 및 병렬 코드 진행을 지원 Async코드는 일시 중단되었다가 나중에 다시 시작할 수있지만 한 번에 프로그램의 한 부분만을 실행 ex) 앱을 일시 중단 후 다시 시작하면 UI업데이트와 같은 작업을 진행하면서 네트워크를 통해 데이터를 가져오는 작업 swift에서의 Concurrency: await, async swift가 아닌 다른 언어에서는 Concurrency를 추가하면 디버그가 더 어렵게 만드는 상황이 발생 Swift의 언어 수준에서 지원하는 async, await를 사용하면 컴파일 시간에 Concurrency에 관한 문제도 파악 가능 Async 함수 정의 및 호출 (async..
Error Handling 개념: 프로그램의 오류 조건에 응답하고 복구하는 프로세스 Swift에서는 런타임에 복구 가능한 오류를 다음 방법으로 처리 throwing, catching, propagating, manipulating Throwing Error (에러 던지기) Swift에서의 오류는 Error protocol을 conform하는 값으로 정의 enum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock } Error Handling 함수에서 오류가 발생하면 프로그램의 흐름이 변경되므로 코드에서 오류가 발생할 수 있는 위치를 빠르게 식별해야 하는데, 이 ..
Optional Chaining 정의: Optional인 것들을 가지고 property나 method, subscript를 쿼리하고 호출하는 프로세스 optional값 중 하나가 nil이 되면 nil반환, 단 중단되는게 아닌 해당부분만 nil반환 let someOptoinalProperty: SomeProperty? = nil print("start") // start print(someOptoinalProperty?.value) // nil print("end") // end Forced Unwrapping의 대안으로 Optional Chaining 사용 런타임 오류에 예방 let roomCount = john.residence!.numberOfRooms if let roomCount = john.re..
Deinitialization deinitializer는 클래스 인스턴스가 해제되기 직전에 호출되며 직접 호출 불가능 deinit 키워드 class type에서만 사용 deinit deinit이 호출될 때까지 instance 메모리가 해제되지 않기 때문에 deinit안에서 호출된 인스턴스의 모든 속성에 접근 가능 deinit 사용 예시 Player클래스는 게임에서 플레이어를 안내하고, 각 플레이어는 지갑에 일정 수의 동전을 보관하는 상태이고 이 동전은 coinsInPurse로 정의 은행에서 coin의 허용량이 정해져있다면, 각 플레이어가 coin을 사용하고 게임이 끝난 경우 Bank에 coin을 반납하는 프로그램 class Player { var coinsInPurse: Int init(coins: I..
Inheritance 클래스들 간의 상속 관계 superclass(부모), subclass(자식) Base class Base class의미: 다른 클래스에서 상속하지 않는 클래스 class Vehicle { var currentSpeed = 0.0 var description: String { return "traveling at \(currentSpeed) miles per hour" } func makeNoise() { // do nothing - an arbitrary vehicle doesn't necessarily make a noise } } subclassing subclassing: 기존 클래스를 기반으로 새로운 클래스를 만드는 작업 class Bicycle: Vehicle { var h..
Subscripts 배열에서의 Random Access하기 위해 index값을 사용하는데, 이때 인덱스 값이 'Subscripts' ex) arr[3] = 1 swift에서는 class, struct, enum의 []연산자를 subscript 키워드를 통해 정의 가능 swift의 subscript 키워드 swift는 subscript를 정의하여 sequence가 아니더라도 특정 연산이 되게끔 가능 struct TimeTable { let multiplier: Int subscript(index: Int) -> Int { return multiplier * index } } let threeTimeTable = TimeTable(multiplier: 3) print(threeTimeTable[5]) // ..