我有这样的代码:
enum enumThingType {
case apples
case oranges
case starfruit
}
func myFunc( enumThing: enumThingType ) -> String {
switch enumThing {
case .apples:
return "Hey, apples"
case .oranges:
return "Hey, oranges"
default:
return ""
}
}
我非常慢慢地填写所有案例的代码,我需要代码才能在 starfruit 及其类似代码中编写代码。
一切都很好,但编译器会为return ""
发出警告永远不会执行。它很乐意生成一个可执行文件,但我很强迫,并希望警告和错误消失。
如果我删除了行return ""
,那么我会得到非常真实且编译器在预期返回的函数中阻止缺少返回'字符串' 。
同样,如果我只删除default:
...,我会得到同样令人抓狂的错误切换必须是详尽的,考虑添加默认条款,这是完全可以理解的,但我是我努力阻止警告和错误。
所以给定这个结构,我可以在编码myFunc
的现有案例的同时消除警告和错误吗?
修改
正如@appzYourLife指出的那样,我在示例代码中省略了预编译器指令,这些指令正在创建错误。此代码与预编译器指令一起发出警告:
enum enumThingType {
case apples
case oranges
case starfruit
}
func myFunc( enumThing: enumThingType ) -> String {
switch enumThing {
case .apples:
return "Hey, apples"
case .oranges:
return "Hey, oranges"
default:
#if DEBUG
print( "Ouch!" )
#else
fatalError()
#endif
return ""
}
}
因为如果没有使用指定的DEBUG创建产品,那么返回永远不会发生 - FatalError()
会阻止它。
但是,此代码不会为所有预编译器指定的案例发出警告:
func myFunc( enumThing: enumThingType ) -> String {
switch enumThing {
case .apples:
return "Hey, apples"
case .oranges:
return "Hey, oranges"
default:
#if DEBUG
print( "Ouch!" )
return ""
#else
fatalError()
#endif
}
}
我只想总结实际的代码修复程序,因为缺少一个正确指定的DEBUG标志为DEBUG条件修复它,而不是非DEBUG条件。再次感谢为此提供帮助的所有人!
答案 0 :(得分:3)
我按照您与 @matt 进行的聊天,看起来您在问题中发布的代码是不真实代码;)
真正的代码更像是这样的
func myFunc( enumThing: enumThingType ) -> String {
switch enumThing {
case .apples:
return "Hey, apples"
case .oranges:
return "Hey, oranges"
default:
#if DEBUG
print("...")
#else
fatalError()
#endif
return ""
}
}
现在我收到你的警告,这是完全正确的。
事实上,由于DEBUG
NOT 已定义,因此#else
块将被执行。
因此fatalError()
将被执行。
由于你在return ""
之后立即放置了fatalError()
......当然return
永远不会被执行。
编译器是对的。