Нет. Во-первых, генерики не являются ковариантными в Swift. Вы не можете передать [String]
, где вы ожидаете [Any]
, поэтому вы не можете конвертировать из Promise<Void>
в Promise<Any?>
. В вашем случае это еще хуже, поскольку вы пытаетесь конвертировать из Promise<Any?>
в Promise<Void>
, а Any?
- это не Void
.
Возможно, вы думаете о Void
как-то особенном, так как это означает «ничего» в магическом, компиляторе. Это не то, что Void
есть. Это всего лишь тип для пустого кортежа (()
). Вы не можете конвертировать из Any?
в ()
. Представьте, можете ли вы это сделать. Тогда я мог бы написать это:
var list: [Void] = [] // This is just as legal as Promise<Void>
f2().then { x: Void in
list.append(x)
}
Теперь я приложил некоторые случайные Дополнительно на мой массив ()
. Это сработает, и компилятор не спасет меня.
Вы могли бы, конечно, создать помощника, чтобы сделать это, если вы хотите, как:
extension Promise {
func ignoringResult() -> Promise<Void> {
return self.then { _ in }
}
}
И тогда вы могли бы написать:
func f2() -> Promise<Void> {
return f1().ignoringResult()
}
PromiseKit уже имеет этот конвертер: Promise.asVoid()
.
Когда вы говорите «без этого», какой синтаксис вы имели в виду? Какую часть вы пытаетесь удалить? –
Вызов 'then'. Я думал о броске. –