这个更好一点:
extension TestResult where SuccessData == Void {
static func success() -> Self {
.success(())
}
}
extension TestResult where FailureData == Void {
static func failure() -> Self {
.failure(())
}
}
let successfulResult: TestResult<Void, Void> = .success()
let failedResult: TestResult<Void, Void> = .failure()
单独的success()
和failure()
静态函数位于不同的扩展中,因此另一个泛型类型可以是任何类型:
let successfulResult2: TestResult<Void, Error> = .success()
let failedResult2: TestResult<Int, Void> = .failure()
我试图使它们成为静态属性,而不是静态函数,这样它们就可以在没有括号的情况下使用,但这导致了编译器错误"泛型类型中不支持静态存储属性".
编辑:我试图用一个值来初始化静态属性,但我可以从答案中看到,链接到它的@MartinR可以用计算(computed)属性来完成:
extension TestResult where SuccessData == Void {
static var success: Self {
.success(())
}
}
extension TestResult where FailureData == Void {
static var failure: Self {
.failure(())
}
}
let successfulResult: TestResult<Void, Never> = .success
let failedResult: TestResult<Void, Void> = .failure