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

koe*_*oen 0 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Ham*_*ish 5

根据SE-0003var函数参数已从 Swift 3 中删除(另请参阅有关该主题的问答)。编译器崩溃而不是生成一条错误消息告诉您这一事实是一个错误——编译器不应该崩溃。

解决方案只是简单地创建您自己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
}
Run Code Online (Sandbox Code Playgroud)