Swift
[Swift] Generic where clause 사용 시 '==' vs ':'
Sky Titan
2022. 9. 25. 15:06
728x90
비교하는 Generic Type이 class인 경우
public extension Array where Element == UIView {
func testable1() {
}
}
public extension Array where Element: UIView {
func testable2() {
}
}
- Element == UIVew
- 무조건 Element가 UIView여야 됨. (ex: Element가 UIControl, UIButton 이면 접근 불가)
- EX) var arr: [UIView]
- Element: UIView
- Element가 UIView를 상속받으면 됨 (ex: Element가 UIControl, UIButton 여도 접근 가능)
- 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")
}
}
- Element == Testable
- 무조건 Element가 Testable여야 함 EX) Testable을 채택하는 UIView, UIControl 등은 접근 불가
- EX) var arr: [Testable]
- Element: Testable
- 무조건 Element가 Testable을 채택하는 구현체여야 함 EX) Testable이 Element인 경우는 접근 불가
- EX) var arr: [UIView]
Testable이 Element인 경우

testable1()에만 접근가능
UIView가 Element인 경우

testable2()에만 접근 가능
728x90