gpt4 book ai didi

Xcode Swift 编译器警告永远不会被执行

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:03 24 4
gpt4 key购买 nike

我有这样的代码:

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 及其同类代码编写代码时,我需要代码正常运行。

一切都很好,但是编译器发出警告 will never be executed for return ""。它很乐意生成一个可执行文件,但我有强制症,希望警告和错误消失。

如果我删除 return "" 行,那么我将得到非常真实的编译器阻止 Missing return in a function expected to return 'String'

同样,如果我只是删除 default:...,我会得到同样引人注目的错误 Switch must be exhaustive, consider adding a default clause,这是完全可以理解的,但我在阻止警告和错误方面很有创意。

那么鉴于此构造,我是否可以在为 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 条件。再次感谢所有为此提供帮助的人!

最佳答案

我关注了你与 @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 ""
}
}

现在我收到了您的警告,这是完全正确的。

事实上,由于 DEBUGNOT 定义的,所以 #else block 将被执行。

所以 fatalError() 将被执行。

并且由于您在 fatalError() 之后立即放置了一个 return ""... 那么 return 当然永远不会执行。

编译器是对的。

更新:定义 DEBUG 编译器标志

  1. 打开项目根目录
  2. 选择目标
  3. 寻找 Swift Compiler - Custom Flags 部分
  4. 添加调试或发布此条目:-D DEBUG

enter image description here

关于Xcode Swift 编译器警告永远不会被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com