본문 바로가기
Swift

[Swift] Generic where clause 사용 시 '==' vs ':'

by Sky Titan 2022. 9. 25.
728x90

비교하는 Generic Type이 class인 경우

public extension Array where Element == UIView {
    
    func testable1() {
        
    }
}

public extension Array where Element: UIView {
    
    func testable2() {
        
    }
}
  1. Element == UIVew
    1. 무조건 Element가 UIView여야 됨. (ex: Element가 UIControl, UIButton 이면 접근 불가)
    2. EX) var arr: [UIView]
  2. Element: UIView
    1. Element가 UIView를 상속받으면 됨 (ex: Element가 UIControl, UIButton 여도 접근 가능)
    2. EX) var arr: [UIView], var arr2: [UIControl]

 

UIView가 Element인 경우

testable1(), testable2() 모두 접근 가능

 

UIControl이 Element인 경우

testable2()에만 접근 가능

 

비교하는 Generic Type이 protocol인 경우

protocol Testable {
    
}

extension UIView: Testable {
    
}

extension Array where Element == Testable {
    
    func testable1() {
        print("should be Testable")
    }
}

extension Array where Element: Testable {
    
    func testable2() {
        print("should conform Testable")
    }
}
  1. Element == Testable
    1. 무조건 Element가 Testable여야 함 EX) Testable을 채택하는 UIView, UIControl 등은 접근 불가
    2. EX) var arr: [Testable]
  2. Element: Testable
    1. 무조건 Element가 Testable을 채택하는 구현체여야 함 EX) Testable이 Element인 경우는 접근 불가
    2. EX) var arr: [UIView]

 

Testable이 Element인 경우

testable1()에만 접근가능

 

UIView가 Element인 경우

testable2()에만 접근 가능

728x90

댓글