У меня установлен протокол:
protocol Usable {
func use()
}
и класс, соответствующий этому протоколу
class Thing: Usable {
func use () {
println ("you use the thing")
}
}
Я хотел бы программно проверить, соответствует ли класс Thing протоколу Usable.
let thing = Thing()
// Check whether or not a class is useable
if let usableThing = thing as Usable { // error here
usableThing.use()
}
else {
println("can't use that")
}
Но я получаю ошибку
Bound value in a conditional binding must be of Optional Type
Если я попробую
let thing:Thing? = Thing()
Я получаю сообщение об ошибке
Cannot downcast from 'Thing?' to [email protected] protocol type 'Usable'
Затем я добавляю @objc
в протокол и получаю сообщение об ошибке
Forced downcast in conditional binding produces non-optional type 'Usable'
В какой момент я добавляю ?
после as
, который, наконец, исправляет ошибку.
Как я могу достичь этой функциональности с условной привязкой к протоколу non @objc, так же, как в видеоролике "Advanced Swift" 2014 WWDC?