我在XCode 6.4中使用swift 1.2 我正在使用" as"在下面的代码中:
let playSoundVC:PlaysoundViewController = segue.destenationViewController as PlaySoundViewController
let data = sender = as RecordAudio
但它给了我一个错误。它说我必须使用" as!"而不是" as"在两条线上都强行向下"它。但是,当我修复它并使用" as!"我的应用程序没有运行。我读过他们做了一个更新," as"是" as!"现在。但为什么我的应用程序仍然没有运行?
答案 0 :(得分:0)
如果你想转发(发送者必须是RecordAudio的超类):
let data = sender as! RecordAudio // make it explicit
如果你想要upcast(发送者必须是RecordAudio的子类):
let data = sender as RecordAudio
如果您想要施放类型:
let data = RecordAudio(sender)
但是你必须有一个正确的RecordAudio类初始值设定项。
在Swift中,语法随着as
和Swift 1.2一起发生了变化
如! for failable casts - 在运行时可能失败的强制转换现在用new表示!运算符使代码的读者和维护者清楚地了解运行时故障的可能性。 (link)
由于as
是向下投射,而destinationViewController
不是PlaysoundViewController
的唯一 超类。 destinationViewController
可以有多个子类。
所以它会崩溃。因此,您必须添加!
以明确表示您知道自己在做什么。
如果它没有运行,则destinationViewController
可能不是PlaysoundViewController
的超类。
PlaysoundViewController
是否继承了destinationViewController
类型?