2016-09-30 37 views
8

我在'Dictionary'上創建了一個擴展來幫助我解析JSON。下面的方法可以幫助我做到這一點:用於檢查可選項的'AnyObject'類型的非可選表達式

func toJSONString() -> String? { 
    if let dict = self as? AnyObject { 
     if let data = try? JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions(rawValue: 0)) { 
      if let json = String(data: data, encoding: String.Encoding.utf8) { 
       return json 
      } 
     } 
    } 
    return nil 
} 

在這條線出現該問題:

if let dict = self as? AnyObject { 

我得到警告說:「在自選支票使用類型‘AnyObject’的非可選的表達「

我該如何解決這個問題?

+0

你不需要解開或施放'self',你已經知道它是一本字典。只需將'self'直接傳遞給'JSONSerialization.data(...)'函數即可。 – dan

+0

錯誤消息說:該對象不是可選的,如果不能使用'if let'。 – vadian

+0

嗯,這是有道理的。非常感謝你 –

回答

2

只需刪除代碼中引起警告的行,並通過self就像JSONSerialization函數一樣。這應該沒有任何問題的工作:

extension Dictionary { 

    func toJSONString() -> String? { 
     if let data = try? JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions(rawValue: 0)) { 
      if let json = String(data: data, encoding: String.Encoding.utf8) { 
       return json 
      } 
     } 

     return nil 
    } 
}