2016-09-30 13 views
8

Tôi đã tạo một tiện ích mở rộng trên 'Từ điển' để giúp tôi phân tích cú pháp JSON. Phương pháp dưới đây giúp tôi làm điều này:Biểu thức không tùy chọn thuộc loại 'AnyObject' được sử dụng trong một kiểm tra cho các tùy chọn

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 
} 

Vấn đề này xảy ra trên dòng này:

if let dict = self as? AnyObject { 

tôi nhận được một cảnh báo nói rằng "biểu hiện không bắt buộc của loại 'AnyObject' được sử dụng trong một tấm séc cho optionals "

Tôi làm cách nào để giải quyết vấn đề này?

+0

Bạn không cần phải bỏ hoặc đúc 'tự', bạn đã biết đó là từ điển. Chỉ cần chuyển 'self' trực tiếp đến hàm' JSONSerialization.data (...) '. – dan

+0

Thông báo lỗi cho biết: Đối tượng không phải là tùy chọn, nếu không thể sử dụng 'if let'. – vadian

+0

Ahhh có ý nghĩa. Cảm ơn bạn rất nhiều –

Trả lời

2

Chỉ cần xóa dòng gây ra cảnh báo khỏi mã của bạn và vượt qua self như đối với chức năng JSONSerialization. Điều này sẽ hoạt động mà không có bất kỳ vấn đề nào:

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 
    } 
} 
Các vấn đề liên quan