2016-09-17 1 views
9

신속하게 두 날짜를 비교할 때>은 (는) 비교할 수 있지만 <은 비교할 수 없습니다. startTime을, endTime- 사용자 및 날짜() Date 형 (이전에있는 NSDate)스위프트 3 - 두 날짜를 비교할 때 <연산자를 모호하게 사용합니다.

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

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

의 모든이가 작동하지 않는 특별한 이유가 있습니까?

나는 실제로 사과 문서를 찾기 위해 노력이 예제를 발견, 그들은 실제로 http://www.globalnerdy.com/2016/08/29/how-to-work-with-dates-and-times-in-swift-3-part-3-date-arithmetic/

내가 그것을이 (가) & & 연산자의 사용, 또는 아마도 단지 문제가되고 있었다 어쩌면 궁금 시작이 코드를 사용 순서의, 그러나 자체적으로 부호를하기조차.

if startTime < endTime {...} 

그러나 동일한 순서를 돌려 보낸다.

분명히 해결 방법을 찾았지만, 왜 이런 일이 일어나고 있는지 매우 궁금합니다.

+0

try (if (Date()> = startTime) && (Date()

+0

@LeoDabus 위의 코드에이 코드를 넣었어야했는데 실제로 시도 했었습니다. 그런 다음 10-12 초 후에 컴파일러가 돌아와서 같은 오류를주었습니다. 내가 시도한 또 다른 일은 구체적으로 날짜로 각각 캐스팅하는 것이고, 나는 다른 곳에서 그것을 보았다. – Dallas

+0

프로젝트를 지우십시오. 둘 다 작동해야합니다 –

답변

22

스위프트 2에서 유사한 프로토콜을 따르기 위해 NSDate을 확장했을 수 있습니다. Date이 이제 Swift3의 비교 프로토콜을 따르기 때문에 제거하십시오.

+9

인터넷에서 임의의 젠체하는 사람이 내가하는 것보다 내 코드를 잘 아는 경우 ... –

+1

정확한 시나리오는 여기 : 2 개의 날짜 비교; <모호한 점에 대해 불평하며> 작동합니다. 사실, NSDate는 이전에 확장되어 Comparable (Swift2.x 버전의 애플리케이션을 작성한 사람)이 준수했으며 <연산자를 덮어 썼습니다. 그냥

+0

알아내는 데는 시간이 걸렸지 만, Swift 2에서 다음 코드를 삭제해야했습니다. 정적 공용 FUNC <(a : 날짜, B : 일) -> {BOOL \t \t 복귀 a.compare (b) == ComparisonResult.orderedAscending \t} –