Protocol as property

처음엔 잘 이해가 안갔는데,,,

프로토콜은 타입이어서 어디든 사용할 수 있다.

struct SearchServices: HasSearchService {
    let searchService: SearchService
}

protocol HasSearchService {
    var searchService: SearchService { get }
}

protocol SearchService {
    func fetchCategories() -> Single<SearchCategories>

저기 보면 HasSearchService가 searchService를 property를 가지는데 SearchService protocol을 요구하고 있다.

위에서 언급했듯이 protocol은 type이기 때문에, 저 searchService는 그냥 해당 SearchService protocol을 구현해준, 그런 클래스나 구조체를 넣어주면되고,

저렇게 protocol을 타입으로 하면 해당 protocol에서 준수하길 바라는 함수들과 property에 접근 가능하다고 생각하면 된다.


참고 문서

protocol as property: https://zeddios.tistory.com/263