! 공식문서를 참고한 글입니다 캡쳐리스트 Capture Lists 기본적으로 클로저는 주변에서 클로저 안에서 사용할 때 필요한 상수와 변수를 캡쳐함 이때 어떻게 밸류를 캡쳐할 것인지 캡쳐리스트를 사용해서 컨트롤 할 수 있음 var a = 0 var b = 0 let closure = { [a] in print(a, b) } a = 10 b = 10 closure() // Prints "0 10" 캡처리스트는 대괄호를 사용하여 파라미터 앞에 명시함 클로저에서 매개변수 이름, 타입, 반환타입을 생략하더라도 캡처리스트를 사용하려면 in 키워드를 사용해야함 캡처리스트는 생성될 때 초기화 되기 때문에 a는 0으로 표시됨 만약 캡쳐한 변수가 참조타입이라면 원래의 인스턴스를 참조해서 캡쳐한다고 생각할 수 있음 cla..
! 공식문서를 참고한 글입니다 보통의 경우에는 Swift에서 메모리 관리를 위해서 어떠한 행동을 해줄 필요가 없다 ARC라는 것이 알아서 사용하지 않는 인스턴스를 메모리에서 해지해주기 때문이다 ARC, Automatic Reference Counting 말그대로 참조의 수를 자동으로 카운팅한다는 것이다 참조가 되는 수를 세고 있다가 더이상 참조되지 않으면 메모리에서 해제한다 ARC가 동작하는 방법 How ARC Works 클래스의 인스턴스를 만들 때마다, ARC는 인스턴스에 대한 정보를 저장하기 위해서 메모리 조각을 할당한다 이 메모리는 인스턴스의 타입에 대한 정보를 갖고, 인스턴스와 관련된 저장된 속성의 값도 갖고 있다 추가적으로, 인스턴스가 더이상 필요하지 않을 때, ARC는 해당 인스턴스에 의해 사..
! 공식문서를 참고한 글입니다 클로저????????????????????? 클로저는 한마디로 말해서 코드블럭 { } 이다. 어렵게 생각하지 말자 클로저의 3가지 종류 클로저는 3가지 종류가 있다. 전역 함수(Global function) : 이름이 있고(Named Closure) 어떤 값도 캡쳐하지 않는 클로저 중첩 함수(Nested function) : 이름이 있고(Named Closure) 관련된 함수로부터 값을 캡쳐할 수 있는 클로저 클로저 표현(Closure expression) : 경량화된 문법으로 쓰여지고 관련된 문맥으로(context) 값을 캡쳐할 수 있는 이름이 없는(Unnamed Closure) 클로저 설명을 들으면 어렵다 캡쳐한다는 뜻은 그냥 미뤄두자 전역 함수는 우리가 생각하는 일반적..
UIAlertController를 사용하다보면 반복적으로 코드를 사용하게 된다. BaseViewController 클래스를 따로 만들어서 해당 클래스에 메서드를 만들어서 사용을 했었는데 매니저를 따로 만드는게 좋지 않을까 싶어서 정보를 찾아보았다. 매니저(헬퍼)를 만들어서 코드의 중복을 줄이거나, 프로토콜을 사용하는 두가지 방법을 확인해보자. UIAlertController의 반복적인 사용 예시1) let ac = UIAlertController(title: "알림", message: "메시지", preferredStyle: .alert) ac.addAction(UIAlertAction(title: "확인!", style: .default, handler: nil)) present(ac, animated..
프로토콜이란 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진 ‘프로토콜을 준수한다’라는 것은 프로토콜의 요구사항을 모두 충족시키는 것 프로토콜은 정의를 하고 제시할 뿐 기능 구현을 하지 않음 프로토콜 채택 protocol 키워드 사용 클래스가 다른 클래스를 상속받는다면, 클래스 이름 다음에 프로토콜 나열 protocol (프로토콜이름) { (프로토콜 정의) } // 타입의 프로토콜 채택 Struct SomeStruct: AProtocol, BProtocol { (구조체 정의) } Class SomeClass: SuperClass, AProtocol, BProtocoal { (클래스 정의) } 프로토콜 요구사항 프로토콜은 자신을 채택하면 프로퍼티나 메서드와 같은 기능들을 요구함 프로퍼..
인스턴스 메소드와 타입메소드, static 메소드와 class 메소드 인스턴스 메소드 - 특정 타입의 ‘인스턴스’에서 호출 타입 메소드 - ‘특정 타입 자체’에서 호출 func 앞에 static 또는 class 키워드를 추가해서 선언 static 메소드와 class 메소드의 차이 static 서브클래스에서 오버라이드 할 수 없음 class 서브클래스에서 오버라이드 할 수 있음 메소드의 호출 똑같이 점(.)문법으로 호출 할 수 있음 다만, 인스턴스에서 호출하는 것이 아니라 타입에서 호출함 class SomeClass { class func someTypeMethod() { // 타입 메소드 구현 } } SomeClass.someTypeMethod() // 메소드 호출 타입 메소드 안의 ‘self’ 타입 메..
제네릭 여러 타입에 유연하게 대응할 수 있음 재사용하기 쉽고 코드의 중복을 줄일 수 있음 깔끔하소 추상적인 표현 가능해짐 많은 표준 라이브러리가 수많은 제네릭 코드로 구성되어 있음 제네릭을 사용할 때는 제네릭이 필요한 타입 또는 메서드의 이름뒤의 사이에 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시함 (제네릭을 사용하고자 하는 타입 이름) (제네릭을 사용하고자 하는 함수 이름) (함수의 매개변수 … ) Array 타입 Array는 타입 매개변수 Elemnet가 있고, map 메서드는 매개변수 T가 있음 Array는 제네릭을 사용하는 제네릭 타입, map 메서드는 제네릭을 사용하는 제네릭 함수 public stuct Array : // 생략 // 중략 public func map // 중략 전위연산자..
컴파일러 제어 구문 컴파일러 제어 구문을 사용하면 컴파일에 영향을 줄 수 있음 조건부 컴파일 블록 #if, #elseif, #endif 등의 키워드가 있음 컴파일에 조건에 맞는 코드는 컴파일 단계에서 포함시키고, 그렇지 않은 코드는 컴파일 하지 않음 #if 로 시작하여 #endif 로 끝남, 다른 조건은 #elseif를 사용 #if (컴파일 조건 1) // 컴파일 조건 1이 참이면 컴파일될 코드 #elseif (컴파일 조건2) // 컴파일 조건 1이 거짓이고, 컴파일 조건 2가 참이면 컴파일될 코드 #else // 컴파일 조건1과 컴파일 조건2가 모두 거짓인 경우 컴파일 될 코드 #endif 각종 환경 확인 함수와 유효한 전달인자 값 조건부 컴파일 블록의 사용 #if os(Linux) print("이 프..
열거형 추가/수정이 불가능 제한된 선택지를 주고 싶을 때 정해진 값 외에는 입력받고 싶지 않을 때 예상된 입력 값이 한정되어 있을 때 값을 가질 수도 가지지 않을 수도 있음 각 항목이 그 자체로 고유의 값이 될 수 있음 원시값(raw value) 형태로 실제 값을 가질 수 도 있음 연관 값(associated values)을 사용하여 공용체라고 불리는 값의 묶음도 구현 가능 기본 열거형 열거형의 선언, 할당, 변경 enum School { case primary case elementary case middle case high case college case university case graduate } enum car { case bus, taxi, car, truck } // 값 할당하고 변경하기..
https://modelinspring.tistory.com/61 [Swift/iOS] 타입캐스팅(1) - 타입 변환, 타입캐스팅, 데이터 타입 확인, 메타 타입, 메타 타입 타입 스위프트는 데이터 타입 안전을 위해서 서로 다른 타입끼리의 값 교환을 제한함 1. 기존 언어의 타입 변환과 스위프트 타입 변환 실패할 수 있는 이니셜라이져 // 실패 할 수 있는 이니셜라이져 v modelinspring.tistory.com 에 이어서 작성되었습니다 스위프트는 데이터 타입 안전을 위해서 서로 다른 타입끼리의 값 교환을 제한함 1. 기존 언어의 타입 변환과 스위프트 타입 변환 실패할 수 있는 이니셜라이져 // 실패 할 수 있는 이니셜라이져 var string:Value String = "000111222" var..
- Total
- Today
- Yesterday
- 강한참조순환
- ASAuthorizationAppleIDCredential
- CoreData
- 디자인패턴
- 강한 참조 순환
- 클로저표현
- 캡쳐리스트
- object
- inout 파라미터 메모리 충돌
- Persistent Container
- core data
- escaping closrue
- 자동클로저
- 회원가입
- 클로저
- Entity
- 메모리 안정성
- unowned
- authorizationCode
- Core Data Stack
- 클로저 축약
- context
- 토큰저장
- autoclosure
- identity Token
- weak
- 클로저 강한 참조
- SWIFT
- Delegate 패턴
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |