【问题标题】:Swift - reference a member in an array with a variableSwift - 使用变量引用数组中的成员
【发布时间】:2020-09-22 11:29:26
【问题描述】:

我有一个多维数组,我尝试使用变量(下面 sn-p 中的“ageVariable”)引用其中一个成员名称,就像使用变量“ageRangeSelected”引用元素一样.

这是我的代码:

let time = Journey[ageRangeSelected].ageVariable

ageVariable 可以是“白天”、“晚上”或“夜晚”。

这甚至可能吗?正如所写,我收到以下错误:

“'Journey' 类型的值没有成员 'ageVariable'”

这是定义数组的代码 - 我希望能够使用变量访问成员“day”、“evening”或“night”。

struct Journey: Identifiable, Equatable {
    let id: Int
    let age: String
    let day: Int
    let evening: Int
    let night: Int
    let drivers: Int
}

func createJourneyMale() -> (Array<Journey>) {
    let journeyMale1720 = Journey(id: 1, age: "17-20", day: 4521, evening: 1243, night: 946, drivers: 440)
    let journeyMale2129 = Journey(id: 2, age: "21-29", day: 5302, evening: 1254, night: 737, drivers: 1877)
    let journeyMale3039 = Journey(id: 3, age: "30-39", day: 5874, evening: 1166, night: 572, drivers: 3015)
    let journeyMale4049 = Journey(id: 4, age: "40-49", day: 6358, evening: 1298, night: 616, drivers: 3282)
    let journeyMale5059 = Journey(id: 5, age: "50-59", day: 6710, evening: 1155, night: 594, drivers: 2877)
    let journeyMale6069 = Journey(id: 6, age: "60-69", day: 6534, evening: 814, night: 418, drivers: 2388)
    let journeyMale70 = Journey(id: 7, age: "70+", day: 5643, evening: 495, night: 242, drivers: 2156)
    let journeyMale = [journeyMale1720, journeyMale2129, journeyMale3039, journeyMale4049, journeyMale5059, journeyMale6069, journeyMale70]
    return (journeyMale)
}

let Journey = createJourneyMale()

【问题讨论】:

  • 显示 Journey 数组声明。如果它是二维的,则需要为第二维提供 selectedIndex。
  • 不清楚。多维数组?我在你的例子中没有看到它。什么是旅程?此外,在没有“s”(或正确的复数形式)的情况下命名数组并以大写字母开头会误导其类型和值。你有具体的例子吗?
  • 什么是旅程?您可以在声明 Journey 的地方发布代码吗?
  • 道歉 - 请参阅上面的更新代码。我基本上希望能够根据变量的值访问成员白天、晚上或晚上。我可以看到如何使用变量访问特定元素而不是特定成员。

标签: arrays swift variables multidimensional-array


【解决方案1】:

首先没有多维数组。这是一个简单的一维数组。

第二个名字代表一个数组的变量总是以复数形式和名字变量总是以小写字母开头。

let journeys = createJourneyMale()

return 的所有参数和返回值中的第三个不是函数,括号具有误导性和混淆性。

func createJourneyMale() -> Array<Journey> {

...

return journeyMale

使用变量访问多个不同属性的唯一方法是keyPath

let ageVariable = \Journey.evening

let time = journeys[ageRangeSelected][keyPath: ageVariable]

【讨论】:

  • 完美 - 谢谢你,瓦迪安。我对这一切都很陌生,所以你的反馈真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 2017-10-28
  • 2014-12-22
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多