제네릭 형식의 특정 인스턴스에만 적용되는 확장을 제공 할 수 있습니까?Swift에서 제네릭 형식의 구체적인 인스턴스를 확장
예를 들어 Int?
에는 메소드를 추가하고 다른 하나는 Optional
에 메소드를 추가하고 싶다고합시다.
이것이 가능합니까?
제네릭 형식의 특정 인스턴스에만 적용되는 확장을 제공 할 수 있습니까?Swift에서 제네릭 형식의 구체적인 인스턴스를 확장
예를 들어 Int?
에는 메소드를 추가하고 다른 하나는 Optional
에 메소드를 추가하고 싶다고합시다.
이것이 가능합니까?
종류입니다. Optional
은 프로토콜이므로 확장을 생성하고이를 제한 할 수 있습니다. 그러나 제한 조건은 유형에있을 수 없지만 프로토콜에 있어야합니다.
extension Optional where Wrapped: SignedIntegerType {
func test() -> Int {
return 0
}
}
을하고 당신이 그것을 사용할 수 있습니다 :
이 작동
let a:Int? = nil
a.test()
을하지만, 당신이하려고하면 :
extension Optional where Wrapped: Int {
func test() -> Int {
return 0
}
}
당신이 오류가 발생합니다 :
type 'Wrapped' constrained to non-protocol type 'Int'
해당 메서드를 호출 할 때는 옵션이 아닌 것처럼 호출해야합니다. –
예, 이상하게 보입니다. IMHO. – pgb
그냥 Int 자체를 확장하십시오 –