gpt4 book ai didi

swift 正确地处理零值

转载 作者:搜寻专家 更新时间:2023-11-01 06:04:00 25 4
gpt4 key购买 nike

阅读可选值时,我确定我的代码中涵盖了所有基础,但我仍然遇到可怕的unexpectedly found nil while unwrapping an Optional value

这是有道理的,因为我读过:What does “fatal error: unexpectedly found nil while unwrapping an Optional value” mean?。它建议将 Int 设为可选,这正是我想要的:

func myCountUpdate(mainDict: [String : NSObject]) {

let myDict = mainDict["start"] as! [String : CFString]
let myCount = subDict["count"] as? String
let myTotal = Int(myCount)? // nope, it forces me to use non-optional !

// as the other thread suggest it's easy to check for nil with an optional int.
// how the hell can you do that if it won't allow you to make it optional?

if myTotal != nil {
print(myCount!)
let label: String = "\(myCount)"
text = label
} else {
text = nil
}
}

我已经尝试了很多东西,包括使用其他值来检查 nil 等。问题是编译器不允许我声明 Int 作为非可选的,那么我的选择是什么? Xcode 没有显示关于这个问题的警告或建议,所以也许这里有人有一个 - ty。

最佳答案

这里最好的方法是使用 swift guards 来检查值是否为 nil。

首先,在第二行中,您使用 subDict 的地方,它没有在其他任何地方引用,应该是 myDict 吗?

这里的问题是 let myCount = subDict["count"] as? String 可能返回 nil 或者 subDict 中没有“count”。因此,当您执行 Int(myCount!) 时,myCount 的强制展开会抛出异常,因为它为 nil。

你应该尽可能避免强制解包,除非你 100% 确定该值不为零。在其他情况下,您应该使用变量的设置来检查它是否不为零。

使用您的代码,使用 guard 的更新版本如下:

func myCountUpdate(mainDict: [String : NSObject]) {
guard let myDict = mainDict["start"] as? [String : CFString],
let myCount = myDict["count"] as? String,
let myTotal = Int(myCount) else {
text = nil
return
}

print(myTotal)
let label: String = "\(count)"
text = label
}

这更安全,因为如果守卫中的任何条件失败,那么它会将文本设置为 nil 并结束该方法。

关于 swift 正确地处理零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149560/

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