gpt4 book ai didi

swift - 三元条件运算符的警告仅发生在局部范围

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:59 24 4
gpt4 key购买 nike

我使用以下 Swift 代码根据单位值设置键字符串:

let units = 0
let key = units == 0 ? "F" : "C"
// this example makes key = "F"

上面的示例在 Swift 文件的全局范围内正常工作,没有警告。但是,当我将相同的代码放入初始化程序或函数中时,我收到一条关于“C”术语的警告:

struct Almanac {
// properties
}

extension Almanac {

init?(json: [String: Any]) {
let units = 0
let key = units == 0 ? "F" : "C" // WARNING: Will never be executed

// ...
}

}

func logunits() {
let units = 0
let key = units == 0 ? "F" : "C" // WARNING: Will never be executed
print("key is \(key)")
}

为什么只有在局部范围内使用三元条件时才会出现此警告?

最佳答案

这与范围有关,因为在某些给定的范围内,编译器能够解析这个简单的表达式,并看到某些部分不会被执行。

有了这个:

func logunits() {
let units = 0
let key = units == 0 ? "F" : "C"
print("key is \(key)")
}

编译器在同一范围内有 units = 0units == 0 ?,所以它能够解析路径(因为没有改变 units 两行之间)并告诉你是的,确实,units 是 0,是的,“C”将始终被忽略。

如果您更改值:

func logunits() {
let units = 1
let key = units == 0 ? "F" : "C"
print("key is \(key)")
}

警告突然从“C”跳到“F”。 :)

如果您将值放在范围之外:

let units = 0

func logunits() {
let key = units == 0 ? "F" : "C"
print("key is \(key)")
}

警告消失。

请注意,如果路径中有任何代码可以更改 units 的值,即使是像本例中这样的愚蠢代码,警告也会消失:

func logunits() {
var units = 0
if true { units = 1 }
let key = units == 0 ? "F" : "C"
print("key is \(key)")
}

关于swift - 三元条件运算符的警告仅发生在局部范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39934205/

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