2016-06-20 9 views
9

私はSwift 2.2からSwift 3.0へXcode 8 betaを使用して自分のプロジェクトを移行しました。Swift 3の「あいまいな接頭辞の使用」コンパイラエラー

私は、次のコードのようなもの(あなたが遊び場にこれを貼り付けることができます)があります:スウィフト2.2で

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 
} 

このコンパイル罰金を。しかし、スウィフト3.0で、私は「プレフィックス」

のエラー

あいまいな使用を取得し、これがスウィフト3.0でコンパイルするために取得する唯一の方法は、別の行にマップを分割することです。

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

let mappedDates = sortedDatesWithCount.map { 
    return $0.0 
} 

ところで、実際のコードでは、私はmapないDate sからNSNotificationオブジェクトを返すんだが、エラーは同じです。この例を単純にするためにここではDateを使用しました。

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

更新:SwiftプロジェクトのためにJIRAを作成しました。あなたはmapに渡す前に、アレイにArraySliceを作る場合

答えて

11

それは動作します:

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

このコンパイラにおける型推論のバグのように見えます。

+1

日付はSwift 3のComparableに準拠しています。 '$ {$ 0.0 $$}'ソート済みで十分でしょう –

+1

ありがとう、私は知らなかった。それはとても良いニュースです! //私はOPのコードを使用しているだけで、Dateはとにかく例であると言います。 :) – Moritz

+0

私にも型推論バグのように見えます。私はそのように報告するつもりです。 @LeoDabus日付のソートについてのヒントをありがとう。実際のコードは実際に日付でソートされています。例のビットはマップからDatesを返しています。 – mluisbrown

関連する問題