使用map将struct属性更改为新数组

时间:2016-09-05 15:21:15

标签: arrays xcode swift3

我正在尝试从另一个数组创建一个新数组,其中一些属性已更改。我按照这个帖子中的答案:Using Map in Swift to Change Custom Struct Properties,但我没有让它工作,并在我的PlayGround中崩溃(XCode 8beta6)

这是一个简单的例子:

struct Day {
   var day: String
}

var mondays: [Day] = []

for i in 0..<10 {
   let day = Day(day: "Monday")

   mondays.append(day)
}

print(mondays)

// create a new array where all days have the day property set to 'Tuesday'
let tuesdays = mondays.map { (var d) -> Day in
   d.day = "Tuesday"
   return d
}

print(tuesdays)

一旦我添加了代码的第二部分,我就会遇到一个崩溃,一个很长的崩溃日志(我不会在这里重现,因为它太大了)。所以它可能只是Swift 3和/或Xcode beta中的一个错误。

我的问题是,我的代码中是否有错误,我是否正确使用了地图?

1 个答案:

答案 0 :(得分:4)

根据SE-0003var函数参数已从Swift 3中删除(有关该主题,请参阅this Q&A)。编译器崩溃而不是生成错误消息告诉你这一事实是一个错误 - 编译器永远不会崩溃。

解决方案只是简单地创建自己的map(_:)函数参数的可变副本。

let tuesdays = mondays.map { (d) -> Day in
    var d = d // mutable copy of d that shadows the immutable function argument d
    d.day = "Tuesday"
    return d
}