【问题标题】:iOs: (Swift 3) I initialized with var variable: [[Any]] = [], but an error message [type 'Any' has no subscript members]iOs:(Swift 3)我使用 var 变量初始化:[[Any]] = [],但出现错误消息 [type 'Any' has no subscript members]
【发布时间】:2018-03-30 13:25:08
【问题描述】:

我用 var timeTableTemp: [[Any]] = [] 初始化了一个变量,但是当我填充它时无法利用结果:

timeTableTemp[i][j] = [Date1, Date2]

当我尝试利用结果时:

let slot = self.timeTableTemp[i][j]
print(slot[1])

我收到错误消息:“type 'Any' has no subscript members”

提前致谢。

【问题讨论】:

  • 将数组声明更改为[[[Date]]]。顺便说一句,这看起来非常复杂。你应该发布你想要完成的事情。可能有一种更简单的方法可以解决您的问题。

标签: ios arrays swift swift3


【解决方案1】:

slot 包含您的日期 ([Date1, Date2]),但编译器不知道:您的数组类型为 [[Any]],这意味着 slot 显示为 Any

您可以将其转换为数组以使用下标功能,例如:

(slot as! [Date])[0]

更好的解决方案是将您的数据模型更改为[[[Date]]],以便编译器可以推断slot 的类型:

var timeTableTemp: [[[Date]]] //...
let slot = timeTableTemp[i][j]
print(slot[1]) // slot is of type [Date] now and supports subscripting

您应该尽可能避免使用Any:Swift 有一个很棒的类型系统,您在使用Any 时会丢弃它。

【讨论】:

  • 不建议强制施法。使用 if let 并安全地转换它。更改数组类型要好得多。顺便说一句,他还需要在尝试下标数组之前检查数组计数。
  • 使用您的反馈更新了我的答案
  • 仍然缺少对数组计数的检查。如果您传递无效的索引,它将使应用程序崩溃
  • @Leo Dabus:[[[Date]]] = [] 的问题在于它发出了另一个我也无法解决的错误消息。问题在于模型中的模型 { let modelArray = Array(repeating: 0, count:model.slots.count) self.timeTableTemp.append(modelArray) } 它是说:无法将 [Int] 类型的值转换为预期参数类型 [[Date]]
  • 尝试传递 [] 而不是 0。但我仍然认为你应该使用不同的方法。没有完整的stackoverflow.com/help/mcve 就无法帮助您
猜你喜欢
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多