【问题标题】:Checking if a value in an multidimensional array is equal to a string swift快速检查多维数组中的值是否等于字符串
【发布时间】:2017-08-30 21:59:33
【问题描述】:

我在检查多维数组中的值时遇到问题。

我在一个包含 3 个数组的数组中创建一个数组。

该数组称为 profilerdata,变量“key”是一个字符串,因此它应该只是这些数组中的三个字符串。

我的日志中的数组是 SwiftDeferredNSArray,我认为这是第一个问题,因为我读过这是一个不可变数组。

var newKeyArray = [[key],[String](),[""]]

for thing in dataArray as! [[String: AnyObject]] {
    newKeyArray[1].append("0")
}

print(newKeyArray)
profilerData.append(newKeyArray as AnyObject)

然后我尝试像这样读取数组中的值:

var n = 1
while n <= elementArray.count {
    if profilerData[n][0] as! String == headertitle {
        print("it matches")
    } else {
        print("it does not match")
    }

    n += 1
}

变量“headertitle”也是一个字符串,但是当它运行时我得到一个错误:

无法将“Swift._SwiftDeferredNSArray”(0x104ce8040) 类型的值转换为“NSString”(0x101f97c60)。

此行出现此错误

if profilerData[n][0] as! String == headertitle {

非常感谢任何帮助,

附言请简单解释一下,因为我是 Swift 新手。

【问题讨论】:

  • 您能解释一下为什么要将newKeyArray 转换为AnyObject 吗?另外,您能否更准确地引用错误消息并解释它出现在哪一行?
  • 我已经添加了这些详细信息,我尝试将其转换为字符串,但我收到错误“无法将类型 '[[String]]' 的值转换为强制类型'String'”或直接离开它追加(newKeyArray),这给了我错误“参数类型'[[String]]'不符合预期的类型'AnyObject'”

标签: arrays swift multidimensional-array


【解决方案1】:

您的数组比您想象的要深一层。要查看这一点,请尝试以下代码,它可以简化您的操作:

let key = "key"
let newKeyArray = [[key],[String](),[""]]
var profilerData = [Any]()
profilerData.append(newKeyArray)

let oneLevel = profilerData[0] as! Array<Array<String>>
let twoLevel = oneLevel[0] // Array<String>
let threeLevel = twoLevel[0] // String

【讨论】:

  • 谢谢,我一度走在正确的轨道上,但收到的消息变量没有下标,所以一定是搞错了,谢谢
  • 嗯,这就是为什么我说你需要考虑为什么要投射到 AnyObject。您根本不应该使用 AnyObject 或 Any 。 (我在示例中使用 Any 只是为了向您展示您在做什么。)使用真实类型。
  • 那么我应该改用什么,因为我似乎无法使用字符串,因为它引发了错误?
  • 我不能告诉你你“应该”做什么。我不知道你在试图做什么。你的代码对我来说完全不透明。您正在制作Array&lt;Array&lt;Array&lt;String&gt;&gt;&gt;。为什么有人会这样做完全打败了我。
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2021-12-11
  • 1970-01-01
  • 2018-02-10
  • 2018-04-01
  • 2014-07-29
相关资源
最近更新 更多