! 공식문서를 참고한 글입니다 In-Out Parameters 함수의 매개변수는 기본적으로 상수 실수로 파라미터의 값을 바꿀 수 없게 되어있고, 이를 바꾸려고 하면 에러가 발생함 함수의 매개변수를 수정하고 함수가 끝난 뒤에도 이를 지속하려면 inout 파라미터로 정의해야함 func printName(name: String) { name = "가짜 이름" // 에러 발생 Cannot assign to value: 'name' is a 'let' constant print(name) } name 파라미터는 상수이기 때문에 바꿀 수 없다고 에러 뿜뿜 inout 파라미터는 이미 정의된 변수를 파라미터로 받고, 그 변수를 바꿀 수 있게 만들어줌 따라서 상수를 받을 수 없음 사용할때는 함수를 호출할 때 &문자를 같..
! 공식문서를 참고한 글입니다 캡쳐리스트 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..
Swift Tutorial: An Introduction to the MVVM Design Pattern Swift Tutorial: An Introduction to the MVVM Design Pattern Swift Tutorial: An Introduction to the MVVM Design Pattern On every new project, you have the privilege of deciding how you’ll architect the app and organize the code. But if you don’t pay attention, or you rush through coding, you risk ending up with spaghetti code. The solution..
프로토콜이란 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진 ‘프로토콜을 준수한다’라는 것은 프로토콜의 요구사항을 모두 충족시키는 것 프로토콜은 정의를 하고 제시할 뿐 기능 구현을 하지 않음 프로토콜 채택 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’ 타입 메..
프로토콜의 연관 타입 연관 타입은 프로토콜에서 사용할 수 있는 플레이스 홀더 이름 연관 타입은 타입 매개변수의 그 역할을 프로토콜에서 수행할 수 있도록 만들어진 기능 제네릭의 타입 매개변수와 유사하게 프로토콜 정의 내부에서 사용할 타입이 ‘그 어떤 것이어도 상관 없지만, 하나의 타입이다’라는 의미 protocol Container { associatedtype ItemType // 연관 타입 정의 var count: Int { get } // 아이템 개수 확인 mutating func append(_ item: ItemType) // 아이템 추가 subscript(i: Int) -> ItemType { get } // 인덱스 값으로 아이템을 가져오기 } class MyContainer: Container..
제네릭 여러 타입에 유연하게 대응할 수 있음 재사용하기 쉽고 코드의 중복을 줄일 수 있음 깔끔하소 추상적인 표현 가능해짐 많은 표준 라이브러리가 수많은 제네릭 코드로 구성되어 있음 제네릭을 사용할 때는 제네릭이 필요한 타입 또는 메서드의 이름뒤의 사이에 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시함 (제네릭을 사용하고자 하는 타입 이름) (제네릭을 사용하고자 하는 함수 이름) (함수의 매개변수 … ) Array 타입 Array는 타입 매개변수 Elemnet가 있고, map 메서드는 매개변수 T가 있음 Array는 제네릭을 사용하는 제네릭 타입, map 메서드는 제네릭을 사용하는 제네릭 함수 public stuct Array : // 생략 // 중략 public func map // 중략 전위연산자..
- Total
- Today
- Yesterday
- Persistent Container
- autoclosure
- identity Token
- Entity
- object
- 강한 참조 순환
- inout 파라미터 메모리 충돌
- CoreData
- ios
- authorizationCode
- context
- 메모리 안정성
- 자동클로저
- Delegate 패턴
- 클로저 축약
- unowned
- 강한참조순환
- 회원가입
- 토큰저장
- Core Data Stack
- 클로저표현
- 캡쳐리스트
- escaping closrue
- ASAuthorizationAppleIDCredential
- core data
- SWIFT
- 디자인패턴
- weak
- 클로저
- 클로저 강한 참조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |