Я работаю с swift-snapshot-testing и обнаружил проблему со значением параметра универсальной функции по умолчанию.
Фреймворк предоставляет такой метод:
func verifySnapshot<Value, Format>(matching value: Value,
as snapshotting: Snapshotting<Value, Format>,
snapshotDirectory: String? = nil) -> String?
где Snapshotting
- это общая структура, подобная этой:
struct Snapshotting<Value, Format> {}
extension Snapshotting where Value == UIViewController, Format == UIImage {
static var image: Snapshotting<UIViewController, UIImage> {
:
}
}
extension Snapshotting where Value == UIView, Format == UIImage {
static var image: Snapshotting<UIView, UIImage> {
:
}
}
Я хочу создать вспомогательный метод, и он работает:
func verify<Value, Format>(matching value: Value,
as snapshotting: Snapshotting<Value, Format>) {
let snapshotDirectory = "/path"
let failure = verifySnapshot(matching: value,
as: snapshotting,
snapshotDirectory: snapshotDirectory)
print(failure ?? "Done!")
}
Но когда я хочу дать snapshotting
значение параметра по умолчанию .image
, оно не компилируется для ошибки Ambiguous reference to member 'image'
func verify<Value, Format>(matching value: Value,
as snapshotting: Snapshotting<Value, Format> = Snapshotting<Value, Format>.image)
Мой вопрос: может ли Swift определить универсальный тип Format
для значения параметра по умолчанию?