2017-11-30 5 views
0

이것은 tableView의 타임 스탬프에있는 각 셀별로 배열을 정렬하기위한 코드입니다.배열 정렬 오류 : "2 진수 연산자 '<'는 2 개의 'Int?'에 적용 할 수 없습니다. 피연산자 "

self.ProjectsArray.sorted(by: { (project, project2) -> Bool in  
    return project.timestamp?.intValue < project2.timestamp?.intValue  
    }) 

배열을 정렬하는 더 좋은 방법이 있습니까? 내가 뭘 잘못하고 있니?

+0

문제는 선택적 개체를 비교하려고하는 것입니다. 변수 중 하나가'nil '인 경우 변수를 비교하는 방법을 정의해야합니다. –

답변

0

수정 - 사용자 의견에 따르면 사용자가 원하는대로 정렬하므로 원하는 위치로 정렬 할 수 있습니다.

귀하의 타임 스탬프 변수는 Optional, 그래서 당신은 Intnil, 또는 nilnil을 비교 할 수있다. 이들을 안전하게 unwrap하고 하나가 nil 인 경우 정렬 순서를 제공하거나 nil-coalescing 연산자를 사용하여 080과 같은 일부 기본 Int로 nil 값을 처리 할 수 ​​있습니다. 두 옵션은 다음과 같습니다.

옵션 랩핑 해제 :

self.ProjectsArray.sort(by: { (project, project2) -> Bool in 
    if let timestamp1 = project.timestamp, let timestamp2 = project2.timestamp { 
     return timestamp1.intValue < timestamp2.intValue 
    } else { 
     //At least one of your timestamps is nil. You have to decide how to sort here. 
     return true 
    }  
}) 

무기 호 - 병합 운영자 :

self.ProjectsArray.sort(by: { (project, project2) -> Bool in 
    //Treat nil values as 0s and sort accordingly  
    return (project.timestamp?.intValue ?? 0) < (project2.timestamp?.intValue ?? 0)  
}) 
+0

반환 한 코드 "섹션"모두 "정렬 된 (by :)에 대한 호출 결과가 사용되지 않음"@creeperspeak –

+0

예. 배열을 사용하지 않고 배열을 정렬하기 만하면됩니다. "sort in place"를하려고한다면'sort by (by by'sort (by '), 원래 어레이를 정렬합니다. 그렇지 않으면'sorted (by'는 원래 배열의 새로운 정렬 된 버전을 반환합니다 – creeperspeak

+0

솔직히 말해서 코드 @creeperspeak와 혼동 스럽다.이 코드 블록 이후에 배열을 정렬해야하는 이유는 무엇입니까? –