Что я здесь делаю неправильно? Это все еще работает нормально, но я хотел бы избавиться от желтого предупреждения, если смогу. Предупреждение находится в операторе «если». Если я уберу "?" на "как", тогда код даже не запустится... он требует, но жалуется на это.
Предупреждение:
Conditional cast from 'UIViewController' to 'UIViewController' always succeeds
Код:
class FadeInPushSegue: UIStoryboardSegue {
var animated: Bool = true
override func perform() {
if let sourceViewController = self.source as? UIViewController, let destinationViewController = self.destination as? UIViewController {
let transition: CATransition = CATransition()
transition.type = CATransitionType.fade; sourceViewController.view.window?.layer.add(transition, forKey: "kCATransition")
sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false)
}
}
}
Будет ли он по-прежнему следить за тем, чтобы то, что его вызывает, было UIViewController, а то, куда оно направляется, — это UIViewController?
Вам не нужно приводить его к UIViewController, потому что источник свойств и адресаты уже являются UIViewController.
open var source: UIViewController { get }
open var destination: UIViewController { get }
Вы видите это предупреждение, потому что вы выполняете преобразование из необязательных UIViewController в необязательные UIViewController.
Когда вы удаляете as?
, ваш код не запускается, потому что вы пытаетесь развернуть необязательное свойство.
Initializer for conditional binding must have Optional type, not 'UIViewController'
Вы должны удалить if
сделать что-то вроде этого:
final class FadeInPushSegue: UIStoryboardSegue {
var animated: Bool = true
override func perform() {
let sourceViewController = self.source
let destinationViewController = self.destination
let transition: CATransition = CATransition()
transition.type = CATransitionType.fade; sourceViewController.view.window?.layer.add(transition, forKey: "kCATransition")
sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false)
}
Отличное объяснение! Спасибо, что нашли минутку, чтобы помочь мне!
просто удалите
as? UIViewController
кастинг.