목록swift (19)
sanichdaniel의 iOS 개발 블로그
요약 Opaque 타입은 변수, 메서드의 리턴타입을 프로토콜 타입으로 숨긴다. 이는 모듈과 모듈을 호출하는 코드 사이에서, 구체 타입을 숨길때 유용하다. 프로토콜을 리턴하는것과의 차이점은 Opaque 타입은 항상 하나의 구체타입을 가르키기에 type의 identity를 간직한다. 물론 caller에게는 프로토콜로만 보인다. 구체 타입은 변수, 메서드의 구현이 결정한다. 이는 caller가 타입을 결정하는 제너릭과 반대이다. 따라서 프로토콜을 리턴하는 상황에서 Self, associatedType 제약이 걸려있는 경우에도, Opaque 타입은 type identity가 간직되기에 프로토콜을 리턴 할 수 있다. (프로토콜을 리턴하는 경우에는 type-erasure wrapper클래스를 구현안해도될수도) Op..
Use Case를 작성하면서 enum과 protocol중 어떤걸 사용할지 고민되는 경우가 많았다. 결론부터 말하면 프로토콜을 지향해야하는데 왜 enum보단 프로토콜을 지향해야하는지 알아보자 UseCase로서 Enum을 사용하는 경우가 많다. Enum은 하나의 namespace로서 작동하고, case를 작성하기 쉽기 때문이다. (namespace: 여러타입, symbol을 하나의 이름으로 묶어준다) 하지만 usecase로서 Enum은 여러가지 문제점이 있다. api 정의를 위해 Enum이 사용된 경우를 생각해보자 enum API { case apiA case apiB case apiC } API는 HTTPMethod, url, parameter들이 정의 되어야 한다. extension API { var h..

요약 프로토콜을 제너릭하게 쓰고 싶으면 associatedtype을 사용하면 된다. associatedtype은 프로토콜이 채택한 순간에 구체 타입으로 교체된다. 하지만 프로토콜을 채택하지 않고 그냥 함수의 인자, 리턴타입, 변수의 타입, 콜렉션의 타입으로 쓰는 경우 컴파일타임에 associatedtype의 구체 타입이 결정이 안되어 컴파일 에러가 난다. 이런경우에는 type-erasure wrapper-class를 만들어서 해결할수 있다. 애플 디벨로퍼 문서를 읽다가 Type-Erasing Wrappers를 발견했다. 무엇인지 알아보기 위해 공부해보았다. Protocols & Associated Types type-erasure에 앞서 protocol과 associated type에 대해 알아야한다. ..

뷰컨을 생성할때 인자를 넣어주고 싶을때가 있다. 그래서 생성자를 만들어주고 인자를 주입하면 2가지 에러가 뜬다. 1. super.init isn't called on all paths before returning from initilizer 2. 'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController' swift 공식 doc를 읽으며 위 2가지 에러가 왜 뜨는지 알아보자! Initialization 개념 인스턴스를 사용하기전에 준비하기. 저장 프로퍼티의 기본값을 주고, 필요에 앞서 이것저것 세팅을 해준다 Memberwise Initializer strut는 명시적으로 initializer 명시하지 않는..