为什么我不能用。它让我用作!但仍然没有应用程序运行

时间:2015-07-14 08:20:40

标签: swift

我在XCode 6.4中使用swift 1.2 我正在使用" as"在下面的代码中:

let playSoundVC:PlaysoundViewController = segue.destenationViewController as PlaySoundViewController  
let data = sender = as RecordAudio  

但它给了我一个错误。它说我必须使用" as!"而不是" as"在两条线上都强行向下"它。但是,当我修复它并使用" as!"我的应用程序没有运行。我读过他们做了一个更新," as"是" as!"现在。但为什么我的应用程序仍然没有运行?

1 个答案:

答案 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类型?