2016-12-09 2 views
0

이 코드는 nsdictionary에서 최상위 값을 가져오고 NSdictionaries 배열에 추가합니다. 스위프트 3로 변환하면 오류가 발생합니다.Swift 3.0에서 keysSortedByValue를 어떻게 사용합니까?

self.array = (self.dict!).keysSortedByValue 
         (comparator: { 
          ($1).compare($0) 
        }) 

모호한 참조 오류가 발생합니다. 그것은 비교기의 형식에 문제가있는 것 같지만 그것을 변경하는 방법을 잘 모르겠습니다 .. 아무도 몰라요?

+0

'self.array'의 유형은 무엇입니까? –

+0

죄송합니다. nsdictionaries의 배열입니다. –

+0

저는이 애플리케이션을 신속하게 3으로 업데이트하고 있으며 여기에 더 많은 코드가 첨부되어 있습니다.이 코드를 사용하면 마지막으로 오류가 발생하므로이 기능을 통해 나를 절약 할 수 있습니다. 물건의 톤을 다시 작성 lol –

답변

0

컴파일러는 함수 유형이 (Any, Any)이고 compare을 사용할 수 없기 때문에 아마 $ 0 및 $ 1을 (를) 추론 할 수 없습니다. 그래서 내가 스위프트 사전을 선호 스위프트를 사용하고있는 경우 Any

let dict: NSDictionary = ["3" : "Orange", "1" : "Apple", "2" : "Pear"] 
let keys = dict.keysSortedByValue(comparator: { (key1: String, key2: String) in 
    return key1.compare(key2) 
} as! (Any, Any) -> ComparisonResult) 
print(keys) 

에게 String의 뒤쪽으로 (또는 어떤 유형의 당신은 그 compare에 부합 사용하고)와 그들을 캐스팅해야합니다.

let swiftDict = ["3" : "Orange", "1" : "Apple", "2" : "Pear"] 
let swiftKeys = swiftDict.sorted(by: { $0.0 < $1.0 }) 
+0

첫 부분은 작동하지 않지만 훨씬 더 단순 해 보이는 것처럼 일반 사전을 사용하려고합니다. –

+0

어떻게 값으로 정렬합니까? 원래 코드가 수행 한 것입니다. –

+0

두 번째 부분을 잘못 편집했습니다. – Frankie

0

이것은 결국 작동이 끝난 것입니다. 나는 NSDictionary로 작업 할 수 없으므로 Frankie의 조언을 듣고 일반 사전을 사용했습니다. 그런 다음이 코드를 사용하여 정렬 한 다음 배열에 추가합니다.

self.dict = snapshot.value as? Dictionary 
let sorted = self.dict.flatMap({$0})?.sorted { $0.0.1 > $0.1.1 } 
for (name, value) in sorted! { 
    self.array.append(name) 
} 
관련 문제