gpt4 book ai didi

ios - 评估项目是否已在数组中

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

我正在尝试评估某个项目是否已在 existingArr 中,以便我不会多次添加它。

但是当我尝试评估 existingArr 是否已包含某个项目时,我不断收到错误“无法将 String 类型的值转换为预期参数类型 @noescape (AnyObject) throws -> Bool”,在这一行ifexistingArr.contains(nD.dayOfTheWeek)==false中:

for days in results! {
let nD = DayClass()
nD.dayOfTheWeek = days[“D”] as! String
//check if there is already an existing Day array in prefs
if var existingArr = NSUserDefaults.standardUserDefaults().arrayForKey("D") {
//if so append the new value to that array and store it
if existingArr.contains(nD.dayOfTheWeek) == false {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(existingArr, forKey: "D")
defaults.synchronize()
}
} else {
//create a new array and store it
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([nD.dayOfTheWeek], forKey: "D")
defaults.synchronize()
}
}

我大致了解它想告诉我什么,但还不足以真正弄清楚。非常感谢任何帮助。

最佳答案

这里的主要问题是 arrayForKey: 返回 [AnyObject]?,并且并非所有对象都是 Equatable

为什么需要Equatablecontains 有两种实现:一种采用对象,另一种采用谓词(以闭包的形式)。但是,采用对象的 contains 要求生成器(本例中为数组)具有符合 Equatable 的元素(数组中的对象)。

因为并非所有对象都是 Equatable,并且 existingArr 的类型为 [AnyObject]?,Xcode 假定您正在尝试调用 contains< 的谓词形式。但是,nD.dayOfTheWeek 不是一个闭包,因此 Xcode 会抛出一个错误,指出它不是一个闭包。

要解决此问题,您需要将 existingArr 转换为 [String] 类型,因为这就是它的类型,并且字符串是 Equatable:

if var existingArr = NSUserDefaults.standardUserDefaults().arrayForKey("D") as? [String] {

注意:这实际上不应该起作用,因为 String 实际上是一个结构(而不​​是对象),但由于某种原因它仍然可以在简单的 Playground 测试中起作用。如果有人可以在评论中解释原因,那就太好了。

关于ios - 评估项目是否已在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973822/

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