2016-09-17 24 views
9

Khi so sánh hai Ngày nhanh, tôi có thể so sánh bằng cách sử dụng>, nhưng không phải là <. StartTime, EndTime và Date() là tất cả các loại ngày (trước đây NSDate)Swift 3 - Sử dụng không rõ ràng toán tử <khi so sánh hai ngày

//Broken Code 
    if Date() >= startTime && Date() < endTime 
    { 
     ... 
    } 
    Gives ambiguous use of < operator error 

    //Working Code 
    if Date() >= startTime && endTime > Date() 
    { 
     ... 
    } 

Có một lý do cụ thể này không làm việc?

Tôi thực sự tìm thấy ví dụ này khi cố gắng tìm tài liệu táo, và họ thực sự sử dụng mã này http://www.globalnerdy.com/2016/08/29/how-to-work-with-dates-and-times-in-swift-3-part-3-date-arithmetic/

tôi bắt đầu tự hỏi nếu có thể đó là sử dụng của các nhà điều hành & &, hoặc có thể chỉ là một vấn đề của đơn đặt hàng, nhưng thậm chí tự làm mã như

if startTime < endTime {...} 

Nhưng nó trả về cùng một thứ tự.

Rõ ràng là tôi đã tìm được cách giải quyết, Nhưng tôi rất tò mò tại sao điều này lại xảy ra.

+0

thử 'if (Date()> = startTime) && (Date()

+0

@LeoDabus Tôi nên đặt mã này ở trên, tôi thực sự đã thử điều đó, hành động như nó muốn hoạt động, và sau đó có thể 10-12 giây trình biên dịch đã trở lại và đưa ra cùng một lỗi. Một điều khác mà tôi đã thử đã từng diễn tả cụ thể là một ngày, tôi thấy rằng ở đâu đó trên SO. – Dallas

+0

thử làm sạch dự án của bạn. cả hai nên làm việc –

Trả lời

22

Bạn có thể mở rộng NSDate để tuân thủ giao thức có thể so sánh trong Swift 2. Chỉ cần xóa nó vì Date hiện tuân theo giao thức có thể so sánh trong Swift3.

+9

Khi một số anh chàng ngẫu nhiên từ Internet biết mã của tôi tốt hơn tôi ... –

+1

Kịch bản chính xác tương tự ở đây: hai Ngày so sánh; làm việc. Thật vậy, NSDate trước đây đã được mở rộng và thực hiện để tuân thủ Comparable (bởi bất cứ ai đã viết phiên bản Swift2.x của ứng dụng) và toán tử <đã bị ghi đè. JUST

+0

Tôi mất một thời gian để tìm ra, nhưng tôi đã có đoạn mã sau từ Swift 2 mà tôi cần phải XÓA. func công cộng tĩnh <(a: Date, b: Date) -> Bool { \t \t return a.compare (b) == CompareResult.orderedAscending \t} –

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