Вы можете просто сделать это, как,
enum Result<T> where T: Resource {
case success(T)
case failure(Error?)
}
Создайте enum Result
с case success
, принимая общее связанное значение типа Resource
и другое case failure
с Error?
в качестве связанного значения .
Поскольку вы используете универсальный параметр типа Resource
, я предполагаю, что Resource
- это protocol
с value
в качестве одного из его свойств.
protocol Resource {
var value: String {get set}
}
Теперь extension Result
выглядит как
extension Result {
var value: Any? {
switch self {
case let .success(resource):
return resource.value
case let .failure(error):
return error
}
}
}
Сейчас return error
в case failure
и resource.value
для case success
.
Нет необходимости указывать универсальный параметр T
с предложением where
в extension
снова, поскольку вы уже сделали это при определении enum Result
.
Использование:
struct R1: Resource {
var value: String
}
let r1 = R1(value: "R1 is of type Resource")
let result = Result<R1>.success(r1)
print(result.value)