2015-09-18 5 views
1

У меня есть этот код в Swift 1.2:Swift 2 Тип литейные Словари

self.publicDatabase!.performQuery(query, inZoneWithID: nil) { 
      results, error in 
      if error != nil { 
       NotificationUtility.postNotification(Notify.CloudKitVenuesRetrieveFailed, userinfo: ["result":results, "error":error]) 
      } 
      else 
      { 
       NotificationUtility.postNotification(Notify.CloudKitVenuesRetrieveSuccess, userinfo: ["result":results]) 
      } 
     } 

Но Swift 2.0 это дает несколько ошибок компилятора:

"Тип выражения является неоднозначным без больше контекста"

и

"Невозможно преобразовать значение типа '[String: [CKRecord]]' ожидаемого типа аргумента '[NSObject: AnyObject]?"

Я знаю, как это исправить, чтобы сделать ошибку уйти, но мне кажется, очень некрасиво и Hacky:

self.publicDatabase!.performQuery(query, inZoneWithID: nil) { 
      results, error in 
      if error != nil { 
       NotificationUtility.postNotification(Notify.CloudKitVenuesRetrieveFailed, userinfo: ["result":results as! AnyObject, "error":error as! AnyObject]) 
      } 
      else 
      { 
       NotificationUtility.postNotification(Notify.CloudKitVenuesRetrieveSuccess, userinfo: ["result":results as! AnyObject]) 
      } 
     } 

Есть ли лучший способ, чем того, чтобы пройти через каждый пункт в словаре и заставить подавленным его на «AnyObject»?

ответ

1

Вы никогда не хотите бросать в AnyObject. Я предполагаю, что ваше исправление работает, потому что вы разворачиваете необязательный, а не потому, что вы производите его в AnyObject. Я предполагаю, потому что я не знаю, какие типы результатов и ошибок на самом деле есть, но это, скорее всего, будет работать:

self.publicDatabase!.performQuery(query, inZoneWithID: nil) { 
     results, error in 
     if error != nil { 
      NotificationUtility.postNotification(Notify.CloudKitVenuesRetrieveFailed, userinfo: ["result":results!, "error":error!]) 
     } 
     else 
     { 
      NotificationUtility.postNotification(Notify.CloudKitVenuesRetrieveSuccess, userinfo: ["result":results!]) 
     } 
    } 
Смежные вопросы