2016-02-18 3 views
1

У меня есть следующий класс, который мне нужно преобразовать в строку JSON, используя Xcode 7 и выше. В предыдущей версии Xcode была доступна функция JSONSerelization.toJson(AnyObject), однако она не отображается в Xcode7.Создание строки JSON из объекта Swift в Xcode 7+

Мне нужно преобразовать следующий класс:

struct ContactInfo 
{ 
    var contactDeviceType: String 
    var contactNumber: String 
} 

class Tradesmen 
{ 
    var type:String = "" 
    var name: String = "" 
    var companyName: String = "" 
    var contacts: [ContactInfo] = [] 

init(type:String, name:String, companyName:String, contacts [ContactInfo]) 
    { 
     self.type = type 
     self.name = name 
     self.companyName = companyName 
     self.contacts = contacts 
    } 

Я настроил мои тестовые данные следующим образом

contactType = 
     [ 
      ContactInfo(contactDeviceType: "Home", contactNumber: "(604) 555-1111"), 
      ContactInfo(contactDeviceType: "Cell", contactNumber: "(604) 555-2222"), 
      ContactInfo(contactDeviceType: "Work", contactNumber: "(604) 555-3333") 
     ] 




var tradesmen = Tradesmen(type: "Plumber", name: "Jim Jones", companyName: "Jim Jones Plumbing", contacts: contactType) 

Любая помощь или направление были бы оценены.

ответ

0

Я не думаю, что есть какой-либо прямой способ, даже в предыдущем Xcode. Вам нужно будет написать свою собственную реализацию. Что-то, как показано ниже:

protocol JSONRepresenatble { 
    static func jsonArray(array : [Self]) -> String 
    var jsonRepresentation : String {get} 
} 

extension JSONRepresenatble { 
    static func jsonArray(array : [Self]) -> String { 
     return "[" + array.map {$0.jsonRepresentation}.joinWithSeparator(",") + "]" 
    } 
} 

А затем реализовать JSONRepresentable в ваших модальностей, как показано ниже:

struct ContactInfo: JSONRepresenatble { 
    var contactDeviceType: String 
    var contactNumber: String 
    var jsonRepresentation: String { 
     return "{\"contactDeviceType\": \"\(contactDeviceType)\", \"contactNumber\": \"\(contactNumber)\"}" 
    } 
} 

struct Tradesmen: JSONRepresenatble { 
    var type:String = "" 
    var name: String = "" 
    var companyName: String = "" 
    var contacts: [ContactInfo] = [] 
    var jsonRepresentation: String { 
     return "{\"type\": \"\(type)\", \"name\": \"\(name)\", \"companyName\": \"\(companyName)\", \"contacts\": \(ContactInfo.jsonArray(contacts))}" 
    } 
    init(type:String, name:String, companyName:String, contacts: [ContactInfo]) { 
     self.type = type 
     self.name = name 
     self.companyName = companyName 
     self.contacts = contacts 
    } 
} 
Смежные вопросы