Com o Swift 3 e o Swift 4, o Stringmétodo é chamado data(using:allowLossyConversion:). data(using:allowLossyConversion:)tem a seguinte declaração:
func data(using encoding: String.Encoding, allowLossyConversion: Bool = default) -> Data?
Retorna um dado contendo uma representação da String codificada usando uma determinada codificação.
Com o Swift 4, String's' data(using:allowLossyConversion:)podem ser usados em conjunto com JSONDecoder's decode(_:from:)para desserializar uma string JSON em um dicionário.
Além disso, com Swift 3 e Swift 4, Stringos s data(using:allowLossyConversion:)também podem ser usados em conjunto com JSONSerializationos jsonObject(with:options:)para desserializar uma string JSON em um dicionário.
# 1 Solução Swift 4
Com o Swift 4, JSONDecodertem um método chamado decode(_:from:). decode(_:from:)tem a seguinte declaração:
func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable
Decodifica um valor de nível superior do tipo especificado a partir da representação JSON fornecida.
O código do Playground abaixo mostra como usar data(using:allowLossyConversion:)e decode(_:from:)para obter a Dictionarypartir de um formato JSON String:
let jsonString = """
{"password" : "1234", "user" : "andreas"}
"""
if let data = jsonString.data(using: String.Encoding.utf8) {
do {
let decoder = JSONDecoder()
let jsonDictionary = try decoder.decode(Dictionary<String, String>.self, from: data)
print(jsonDictionary) // prints: ["user": "andreas", "password": "1234"]
} catch {
// Handle error
print(error)
}
}
# 2 Solução Swift 3 e Swift 4
Com o Swift 3 e o Swift 4, o JSONSerializationmétodo é chamado jsonObject(with:options:). jsonObject(with:options:)tem a seguinte declaração:
class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> Any
Retorna um objeto Foundation a partir de dados JSON fornecidos.
O código do Playground abaixo mostra como usar data(using:allowLossyConversion:)e jsonObject(with:options:)para obter a Dictionarypartir de um formato JSON String:
import Foundation
let jsonString = "{\"password\" : \"1234\", \"user\" : \"andreas\"}"
if let data = jsonString.data(using: String.Encoding.utf8) {
do {
let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String : String]
print(String(describing: jsonDictionary)) // prints: Optional(["user": "andreas", "password": "1234"])
} catch {
// Handle error
print(error)
}
}