sanichdaniel의 iOS 개발 블로그
Generic where cause 본문
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 |