Вот кое-что, с чем я играю.Проблема в том, что у меня есть контейнерный класс, который имеет универсальный аргумент, который определяет тип, возвращаемый из замыкания.Я хочу добавить функцию, которая доступна только в том случае, если универсальный тип является необязательным, и эта функция возвращает экземпляр, содержащий ноль.
Вот код, с которым я сейчас играю (который не будет компилироваться):
open class Result<T>: Resolvable {
private let valueFactory: () -> T
fileprivate init(valueFactory: @escaping () -> T) {
self.valueFactory = valueFactory
}
func resolve() -> T {
return valueFactory()
}
}
public protocol OptionalType {}
extension Optional: OptionalType {}
public extension Result where T: OptionalType {
public static var `nil`: Result<T> {
return Result<T> { nil } // error: expression type 'Result<T>' is ambiguous without more context
}
}
Что я хотел бы использовать так:
let x: Result<Int?> = .nil
XCTAssertNil(x.resolve())
Есть идеи, как заставить это работать?