9

我刚刚使用 Xcode 8 beta 将我的项目从 Swift 2.2 迁移到 Swift 3.0。

我有类似于以下代码的内容(您可以将其粘贴到操场上):

import Foundation

let datesWithCount: [(Date, Int)] = [(Date(), 1), (Date(), 2), (Date(), 3)]

let dates: [Date] = datesWithCount.sorted {
    $0.0 < $1.0
}.prefix(1).map {
    return $0.0
}

在 Swift 2.2 中,这编译得很好。但是,使用 Swift 3.0 我得到了错误

'前缀'的模糊使用

在 Swift 3.0 中编译它的唯一方法是将映射拆分为单独的行:

let sortedDatesWithCount = datesWithCount.sorted {
    $0.0 < $1.0
}.prefix(1)

let mappedDates = sortedDatesWithCount.map {
    return $0.0
}

顺便说一句,在实际代码中,我NSNotificationmapnot Dates 返回对象,但错误是相同的。我只是Date在这里用来简化示例。

有没有办法让它编译为一个衬里?

更新:为 Swift 项目创建了一个JIRA

4

1 回答 1

11

如果在将 ArraySlice 传递给 Array 之前将其转换为 Array,它会起作用map

let dates: [Date] = Array(datesWithCount.sorted {
    $0.0 < $1.0
}.prefix(1)).map { return $0.0 }

看起来像是编译器中的类型推断错误。

于 2016-06-20T20:30:05.643 回答