【问题标题】:Use map to change struct property into new array使用 map 将结构属性更改为新数组
【发布时间】:2017-01-13 00:04:15
【问题描述】:

我正在尝试从另一个更改了某些属性的数组创建一个新数组。我遵循了这个帖子中的答案: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 中的一个错误。

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

【问题讨论】:

    标签: arrays xcode swift3


    【解决方案1】:

    根据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
    }
    

    【讨论】:

    • 如果还没有,您应该在bugs.swift.org提交编译器崩溃的错误报告
    • 已提交错误报告!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多