2016-06-20 14 views
9

Tôi vừa di chuyển dự án của mình từ Swift 2.2 lên Swift 3.0 với phiên bản Xcode 8 beta.Lỗi trình biên dịch "Sử dụng tiền tố mơ hồ" với Swift 3

Tôi có một cái gì đó tương tự như đoạn mã sau (bạn có thể dán vào một sân chơi):

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 
} 

Trong Swift 2.2 này được biên soạn tốt. Tuy nhiên, với Swift 3.0 Tôi nhận được lỗi

sử dụng mơ hồ của 'prefix'

Cách duy nhất để có được điều này để biên dịch trong Swift 3.0 là để tách ra bản đồ thành một dòng riêng biệt:

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

let mappedDates = sortedDatesWithCount.map { 
    return $0.0 
} 

BTW, trong đoạn code thực tế tôi đang trở về NSNotification đối tượng từ map không Date s nhưng lỗi là như nhau. Tôi chỉ sử dụng Date ở đây để làm ví dụ đơn giản.

Có cách nào để làm điều này để biên dịch như một lớp lót không?

CẬP NHẬT: Đã tạo JIRA cho dự án Swift.

Trả lời

11

Nó hoạt động nếu bạn thực hiện các ArraySlice vào một mảng trước khi đi qua nó để map:

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

này trông giống như một kiểu suy luận lỗi trong trình biên dịch.

+1

Ngày tuân theo giao thức So sánh trong Swift 3. 'được sắp xếp {$ 0.0 <$ 1.0}' phải đủ –

+1

Cảm ơn, tôi không biết. Đó là tin rất tốt! // Tôi chỉ sử dụng mã của OP và họ nói Date chỉ là một ví dụ. :) – Moritz

+0

Trông giống như một lỗi suy luận kiểu cho tôi. Tôi sẽ báo cáo nó như vậy. @LeoDabus cảm ơn về mẹo sắp xếp Ngày. Mã thực sự cũng đang phân loại vào ngày tháng. Ví dụ bit là trở về Ngày từ bản đồ. – mluisbrown

Các vấn đề liên quan