9

Xcode 8 ベータ版を使用して、プロジェクトを 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
}

ところで、実際のコードではnotNSNotificationからオブジェクトを返していますが、エラーは同じです。ここでは、例を簡単にするために使用しました。mapDateDate

これをワンライナーとしてコンパイルする方法はありますか?

更新: Swift プロジェクトのJIRAを作成しました。

4

1 に答える 1

11

に渡す前に ArraySlice を配列にすると機能しmapます。

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

これは、コンパイラの型推論のバグのようです。

于 2016-06-20T20:30:05.643 に答える