일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uitableview
- MVVM
- HIG
- 리펙터링
- collectionview
- 애니메이션
- 리펙토링
- UITextView
- ios
- SWIFT
- Xcode
- RxCocoa
- 리팩토링
- Observable
- Protocol
- combine
- 스위프트
- ribs
- clean architecture
- UICollectionView
- swift documentation
- uiscrollview
- Human interface guide
- tableView
- swiftUI
- 클린 코드
- Refactoring
- rxswift
- map
- Clean Code
- Today
- Total
목록swift documentation (16)
김종권의 iOS 앱 개발 알아가기
Memory Safety (메모리 안전) atomic: Swift는 메모리의 위치를 수정하는 코드가 해당 메모리에 독점적으로 액세스할 수 있도록 요구하여 동일한 메모리 영역에 다중 액세스가 충돌하지 않는 성질 메모리 Access conflicting 읽기 access, 쓰기 access // A write access to the memory where one is stored. var one = 1 // A read access from the memory where one is stored. print("We're number \(one)!") 메모리 access conflicting: 코드의 다른 부분이 동시에 메모리의 동일한 위치에 access하는 경우 발생 시간에 따라 같은 input을 주어도 ..
Generics 제네릭스를 사용하는 목적 유연하고 재사용 가능한 함수 작성 중복을 피하고 그 의도를 명확하고 추상적인 방식으로 표현하는 코드 작성 Generics으로 해결할 수 있는 문제 swap 함수 // non-generics func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } // generics func swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } generics를 사용하여 linked-list 구현 Node 정의 public class Node { var value: T va..
Protocol (프로토콜) protocol이란 특정 작업이나 기능에 맞게 method, property 및 기타 요구 사항의 청사진을 정의 protocol은 해당 요구 사항의 실제 구현을 제공하기 위해 class, struct, enum에 의해 'conform'될 수 있는 것 protocol을 채택하는 것을 swift에서 'conform' 명명 protocol에서 property 정의 let은 불가, var만 가능 { get set }이나 { get } 속성 제공 protocol SomeProtocol { var mustBeSettable: Int { get set } var doesNotNeedToBeSettable: Int { get } } protocol에서 static 정의 protocol An..
Extensions 기존 class, struct, enum, protocol에 새로운 기능 추가 추가 가능한 것 computed property instance method 새로운 init sucscript 새로운 nested type extension - Computed Property 주의: stored property는 불가 literal값에도 extension이 가능 extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double {..
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..
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..