【发布时间】:2015-07-01 15:44:57
【问题描述】:
我正在尝试用 swift 重写一个当前在 Objective-C 中的应用程序。我如何将这一行更改为 Swift,因为我目前的尝试并不正确
Tabata *tabata = [notification object];
这是整个函数:
- (void)stateChanged:(NSNotification*)notification
{
if (enabled)
{
Tabata *tabata = [notification object];
switch (tabata.getState) {
case EXERCISE:
case RELAXATION:
[player play];
break;
default:
break;
}
}
}
这是我转换成 Swift 的内容:
func stateChanged(notifcation: NSNotification) {
if enabled {
var tabata: Tabata! = notification.object //error "Use of unresolved identifier 'notification'"
switch tabata.getState() {
case .EXERCISE: fallthrough
case .RELAXATION:
player.play()
break
default:
break
}
}
}
【问题讨论】:
-
您有一个错字:您的方法签名将参数列为
notifcation,而方法主体尝试使用notification。除此之外,一切看起来都很好。 -
感谢您指出这一点,尽管现在它给了我错误“'AnyObject?'不能转换为 'Tabata!'"
-
没关系,我是通过添加'as!田畑!'
-
我想提醒一句,如果您将代码库转换为 swift,那么如果某些内容可能为零,只需将其视为可选(使用
?语法) 与上面代码中的隐式解包可选 (!) 相对。如果 nil 突然出现在无法处理的地方,这只会为您的应用程序在运行时崩溃提供机会。如果您将其视为可选项,那么编译器将帮助您确保nil永远不会出现在不应该出现的位置。
标签: objective-c swift ios8 xcode6