gpt4 book ai didi

arrays - "Initializer for conditional binding must have Optional type, not ' [任意] '"- swift

转载 作者:行者123 更新时间:2023-11-30 11:27:44 25 4
gpt4 key购买 nike

我正在学习 Swift,目前正在构建一个小型应用程序,它将 double 组存储到 NsUserDefaults 中,然后检索值。然后,我想对数据执行一些数学运算,并将结果作为字符串输出,但是,类型限制意味着我无法这样做。

目前我的代码如下:

 // SAVE DOUBLES TO NSUSERDEFAULTS
let defaults = UserDefaults.standard
let distanceElapsed=0.0
let counter=3.0
let paceVal=5.4
let genericValues=[Double(distanceElapsed), Double(counter), Double(paceVal)]
defaults.set(genericValues, forKey: distTimeKey)

// LOADING VALUES
let distTime = defaults.array(forKey: distTimeKey) ?? [Double]()
guard let array = distTime, let pace = Optional.some.(array[2]) else{
return
}

let stringOP=String(pace)

错误:但是,这返回两个错误

enter image description here如果您能提供任何帮助,我们将不胜感激

最佳答案

嘿,乔治,你做错的事情是错误地使用了守卫语句。 Guard 语句用于解包可选对象的值。

现在让我们分析您的代码。可选的事情是当您获取保存在 UserDefaults 中的值数组并且它是 [Any]? 时。现在更进一步,您知道您将值保存为 double 组,因此您需要将 [Any]? 转换为 [Double]。那么让我们准确地做到这一点。因此,如果您要修复所有内容,这将是最终代码。

let defaults = UserDefaults.standard
let distanceElapsed = 0.0
let counter = 3.0
let paceVal = 5.4
let genericValues = [Double(distanceElapsed), Double(counter), Double(paceVal)]
defaults.set(genericValues, forKey: distTimeKey)

guard let distTime = defaults.array(forKey: distTimeKey) as? [Double] else {
// Do something if there are no values or if the values in the array were not of type Array of double in distTime
fatalError("Something wrong")
}
if distTime.count > 2 {
let pace = distTime[2]
let paceAsString = String(pace)
print(paceAsString)
}

因此,为了解释代码,如您所见,我们使用 as? 来可选地转换为 [Double]guard else意味着如果该值没有转换为 [Double] 则执行 else block ,如果它确实继续执行。在本例中,我只是抛出了一个 fatal error ,但您可以简单地从执行中返回。

那么你的第二个问题是你试图获取数组第二个索引处的值;但是,您知道如果第二个索引中没有值,您将尝试访问不存在的值。这就是 distTime.count > 2 的用途。

我希望这能更好地澄清事情。我强烈建议您复习一下 Swift 语言基础知识。文档中有一些很好的示例可以帮助您改进代码。

关于arrays - "Initializer for conditional binding must have Optional type, not ' [任意] '"- swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50564426/

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