일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- 리펙터링
- MVVM
- RxCocoa
- clean architecture
- swiftUI
- 클린 코드
- 애니메이션
- 리팩토링
- Observable
- ribs
- Clean Code
- UICollectionView
- UITextView
- Protocol
- uitableview
- 리펙토링
- combine
- tableView
- Refactoring
- Xcode
- swift documentation
- rxswift
- collectionview
- map
- uiscrollview
- HIG
- Human interface guide
- ios
- SWIFT
- Today
- Total
목록swift 공식 문서 (27)
김종권의 iOS 앱 개발 알아가기
Overflow Operator 단순히 +, -로 접근하면 overflow 런타임 에러 발생 overflow operator 추가: &+ 빼기: &- 곱셈: &* ex) Int16의 범위는 -32768 ~ 32767 var potentialOverflow = Int16.max print(potentialOverflow) // 32767 potentialOverflow = potentialOverflow &+ 1 print(potentialOverflow) // -32768 Operator method 연산자 재정의: static func로 정의 struct Vectror2D { var x = 0.0, y = 0.0 } extension Vectror2D { static func + (left: Vectr..
Access Control 다른 소스 파일 또는 모듈의 코드에서 코드 부분에 대한 엑세스를 제한 코드의 구현 세부 정보를 숨기고 해당 코드에 엑세스하고 사용할 수 있는 기본 인터페이스를 지정 가능 모듈과 소스파일 구분 모듈: 배포 단위 프레임워크 또는 응용프래그램을 import로 다른 모듈로 가져올 수 있는 성격 소스파일: 단순히 소스코드 파일이므로 소스 파일에서 여러 유형에 대한 access control 정의가 가능 Access level open 모든 소스 파일에서 해당 level 접근 가능 + 모든 곳에서 서브클래싱 가능 public 모든 소스 파일에서 해당 level 접근 가능 + 같은 모듈 내에서만 서브클래싱 가능 internal (외부 모듈에서 코드 확인 불가) 같은 모듈 내에서만 접근 가능..
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을 주어도 ..
ARC 앱의 메모리 사용량을 추적하고 관리하는 방법 인스턴스가 생성될 때마다 ARC는 해당 인스턴스에 대한 정보를 저장하기 우해 메모리 청크를 할당 ARC는 strong reference를 통해, 현재 사용중인 instance가 메모리 해제되지 않도록 유지 ARC는 현재 인스턴스를 참조하는 속성, 상수, 변수의 count를 추적 > count가 하나 이상 존재하는 한 인스턴스를 할당해제하지 않는 것 ex) class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { print("\(name) is being deinitialized") } } var re..
Opaque Type Method가 있을 때 외부에서는 protocol을 준수한 구현체의 반환타입을 모르게끔 설정하는 방법 함수의 반환 타입으로 고정 (concrete) 타입 을 제공하는 대신, 반환 값을 자신이 지원하는 프로토콜로 설명 프로토콜 타입인 값을 반환하는 것과는 달리, 불투명 타입은 타입 정체성 (type identity) 을 보존 반환 타입 앞에 some 키워드 기입 ex) some을 사용하지 않으면 컴파일 에러 발생되는 케이스1 // Error: Protocol 'Collection' can only be used as a generic constraint because it has Self or associated type requirements func someList() -> Col..
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 {..