2016-07-24 2 views
2

가져 오기 요청이 반환되는 사전이 있습니다. 이 사전은 [String: NSDate]의 날짜 배열로 만들어집니다. 이 사전의 값은 [:]입니다. 나는 그것을 제거하기 위해 아무것도 할 수 없습니다. 내가 2 일 동안 모든 것을 시도했기 때문에 누구든지 도울 수있다.Swift : 사전, 키가없는 값 및 값이 없음

let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]] 
    print("results \(results)")  
    dates = results.map { $0["savedTime"]! as NSDate } 

이 인해 savedTime 키

인쇄 결과 전무 인에 실패

[[ "savedTime"입니다 : 2016년 7월 19일 23시 0분 0초 0000] , [:]]

+0

예, 알고 있습니다. 죄송합니다 어떻게 [:] 사전을 제거하는 양식을 물어 깜빡. – SashaZ

답변

3

이 구조는 $0["savedTime"]!입니다. 객체에 !을 넣으면 객체가 항상있을 것이라는 것을 알 수 있지만 항상 존재하는 것은 아닙니다. 컴파일러에게 거짓말을하고 있기 때문에 충돌이 발생합니다. !을 제거해보세요.

또한 위의 줄에서 값이 NSDates라는 것을 컴파일러에 이미 알렸으므로 as NSDate을 넣는 것은 필요하지 않습니다. 마지막으로 모든 사전에 올바른 키가있는 것은 아니므로 사전을 제거해야합니다. 이를 수행하는 데는 두 가지 방법이 있습니다. 하나는 닐을 필터링하는 것입니다. 다른 하나는 flatMap을 사용하여 동시에 nils를 변환하고 필터링하는 것입니다.

그러면 다음과 같이 끝납니다.

let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]] 
print("results \(results)") 
dates = results.flatMap { $0["savedTime"] } 

비록 위의 내용이 컴파일되고 실행 되더라도 실제로 필요한 것이 아닐지 모르지만 걱정됩니다. 사전 배열은 managedObjectContext를 꺼내는 것이 다소 이상한 일입니다 ...

+0

고마워요. 나는 Tableview를 위해 ManagedObjectContext를 사용했다. 그런데 값의 배열을 얻기 위해 평균을 얻는 등 나는 사전을 발견하고 지금까지 잘 작동하는 것처럼 보인다. – SashaZ