Swift 按数组中的名称访问属性

Swift 按数组中的名称访问属性,swift,Swift,如果我有以下设置: struct Job { let jobDescription: String let days: [String] let hourlyPay: Double } var jobArray = [ Job(jobDescription: "Dog Walker", days: ["Monday", "Wednesday", "Friday"], hourlyPay: 7), Job(jobDescription: "Babysit

如果我有以下设置:

struct Job {
    let jobDescription: String
    let days: [String]
    let hourlyPay: Double
}

var jobArray = [
    Job(jobDescription: "Dog Walker", days:  ["Monday", "Wednesday", "Friday"], hourlyPay: 7),
    Job(jobDescription: "Babysitter", days:  ["Tuesday", "Wednesday"], hourlyPay: 15),
    // etc
]
或者只是一个数组(不带结构):

如果我知道工作描述,是否有任何方法可以让我引用与之相关的其他属性,而不必通过循环测试每个工作描述以查看其是否匹配

因此,不是:

for (name, days, salary) in jobArray {
  if name == "Babysitter" {
     print(salary)
  }
}

我从一开始就知道我想要哪个名字,并且可以在没有循环的情况下引用它的薪水。

如果你可以使用
数组,我假设你也可以使用
字典

var jobs = [
  "Dog Walker"    : (["Monday", "Wednesday", "Friday"], 7),
  "Babysitter"    : (["Tuesday", "Wednesday"], 15),
  "Leaves Raker"  : (["Sunday", ""], 10)
]

if let (days, rate) = jobs["Babysitter"] {
  println("Babysitter hourly rate \(rate) on \(days)")
}
它在[星期二、星期三]打印每小时15美元的保姆工资

如果您对Swift 2也感兴趣,可以将代码转换为如下内容:

var jobs = [
  "Dog Walker"    : (["Monday", "Wednesday", "Friday"], 7),
  "Babysitter"    : (["Tuesday", "Wednesday"], 15),
  "Leaves Raker"  : (["Sunday", ""], 10)
]

func printJobDescription(job: String) {
  guard let (days, rate) = jobs[job] else {
    return
  }

  print("\(job) hourly rate \(rate) on \(days)")
}

printJobDescription("Babysitter")
var jobs = [
  "Dog Walker"    : (["Monday", "Wednesday", "Friday"], 7),
  "Babysitter"    : (["Tuesday", "Wednesday"], 15),
  "Leaves Raker"  : (["Sunday", ""], 10)
]

func printJobDescription(job: String) {
  guard let (days, rate) = jobs[job] else {
    return
  }

  print("\(job) hourly rate \(rate) on \(days)")
}

printJobDescription("Babysitter")