이 솔루션은 그 안에 결과를 감싸는 associatedType와 다른 프로토콜을 만드는 것입니다.
protocol Resultable {
associatedType ValueType
var isSuccess: Bool { get }
var value: ValueType? { get }
}
및 결과가 Resultable을 확장합니다
extension Result: Resultable {
typealias ValueType = Value
var isSuccess: Bool { ... }
var value: ValueType? { ... }
}
및 Resultable
를 사용하여 PAT
을 확장 :
extension PAT where Element: Resultable {
// in here you have access to Resultable.ValueType
}
주
확실 쓰기
Element: Resultable
하지
Element == Resultable
을합니다. 이것이 제 코드가 처음에는 작동하지 않는 이유입니다.
좋은 질문입니다. 'where Element == Result'또는 뭔가를 할 수 있다고 생각하지만, Value 대신 generic을 유지하면서 결과 유형에 대해 수행 할 수 있는지 확신하지 못합니다. 하나의 옵션은 결과를 다른 프로토콜과 일치시키는 것입니다. 그러면'Element : OtherProto'라고 말할 수 있습니다. –
jtbandes
@jtbandes 옙'Result '은 작동하지만 다른 프로토콜을 따르는 것도 작동하지 않습니다. 어떤 경우에는 작동하지만 메서드 나 변수가 'Value'로 작업하기를 원한다면 실용적이지는 않습니다. it sais : "값은 구체적 또는 일반 매개 변수로만 사용할 수 있습니다." –
farzadshbfn
확장 프로그램에서 정확히 무엇을 하시겠습니까? – jtbandes