Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

sanichdaniel의 iOS 개발 블로그

Generic where cause 본문

swift

Generic where cause

sanich8355 2020. 10. 1. 16:23
Generic where문을 사용하며 문법이 헷갈리는 경우가 많아 정리해보았다

 

제너릭 where문으로 type paramter과 associated type에 추가적으로 더 요구사항을 줄 수 있다

 

where 요구사항

 

요구사항은 type paramter가 특정 클래스를 상속받거나, 프로토콜을 채택함으로 나타낸다. 

 

<T: Comparable> -> <T> where T: Comparable 요렇게 문법적 슈가로 쓸수도 있지만

 

<S: Sequence> where S.Iterator.Element: Equatable

로 사용하여, S Sequence protocol 채택하고, associated type S.Iterator.Element가 Equatable protocol을 채택함을 나타낸다. 

 

<S1: Sequence, S2: Sequence> where S1.Iterator.Element == S2.Iterator.Element

2개의 타입이 동일함을 나타낸다

 

Associated type에도 제너릭 where문을 사용가능하다

아래처럼 associatedtype 이름이 같은 경우는 where문으로 타입이 일치할 경우를 안줘도 되는것 같다.

// Reactor을 viewDidLoad 이후에 bind 하도록 하는 코드를 축약했다
public protocol View: class{
    associatedtype Reactor
    var reactor: Reactor? { get set }
}

protocol VC: class {
    associatedtype Reactor
    
    var _reactor: Reactor? { get set }
    
    func bind()
}

extension VC where Self: View {
    func bind() {
        reactor = _reactor
    }
}

 

하지만 다른 경우에는 where문으로 조건을 주면 된다

public protocol View: class{
    associatedtype Reactor2
    var reactor: Reactor2? { get set }
}

protocol VC: class {
    associatedtype Reactor
    
    var _reactor: Reactor? { get set }
    
    func bind()
}

extension VC where Self: View, Reactor2 == Reactor {
    func bind() {
        reactor = _reactor
    }
}

'swift' 카테고리의 다른 글

Hashable  (0) 2020.10.07
KeyPath  (0) 2020.10.03
Opaque Types  (0) 2020.09.29
enum vs protocol as UseCase  (0) 2020.09.28
Type Erasure  (0) 2020.09.28