标签: codable

使用字典/数组初始化符合Codable的对象

主要是我的用例是使用字典创建对象:例如

struct Person: Codable { let name: String }    
let dictionary = ["name": "Bob"]
let person = Person(from: dictionary)    
Run Code Online (Sandbox Code Playgroud)

我想避免编写自定义实现,并希望尽可能高效.

swift codable

10
推荐指数
1
解决办法
5364
查看次数

Swift 4解码简单的根级json值

根据JSON标准RFC 7159,这是有效的json:

22
Run Code Online (Sandbox Code Playgroud)

如何使用swift4的可解码将其解码为Int?这不起作用

let twentyTwo = try? JSONDecoder().decode(Int.self, from: "22".data(using: .utf8)!)
Run Code Online (Sandbox Code Playgroud)

swift swift4 codable

10
推荐指数
2
解决办法
1822
查看次数

Swift Codable希望解码Dictionary <String,Any>,但却找到了一个字符串/数据

我一直在使用该Codable协议

这是我的JSON档案:

    {  
   "Adress":[  

   ],
   "Object":[  
      {  
         "next-date":"2017-10-30T11:00:00Z",
         "text-sample":"Some text",
         "image-path":[  
            "photo1.png",
            "photo2.png"
         ],
         "email":"john.doe@test.com",
         "id":"27"
      },
      {  
         "next-date":"2017-10-30T09:00:00Z",
         "text-sample":"Test Test",
         "image-path":[  
            "image1.png"
         ],
         "email":"name.lastename@doe.com",
         "id":"28"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

我只需要关注Object数组,"image-path"数组可以包含0,1或2个字符串.

所以这是我的实现:

struct Result: Codable {
    let Object: [MyObject]
}

struct MyObject: Codable {

    let date: String
    let text: String
    let image: [String]
    let email: String
    let id: String

    enum CodingKeys: String, CodingKey {
        case date = "next-date"
        case text = "text-sample"
        case image = "image-path"
        case …
Run Code Online (Sandbox Code Playgroud)

json swift swift4 codable

10
推荐指数
1
解决办法
1万
查看次数

使用Swift的Encodable将可选属性编码为null,无需自定义编码

我想JSONEncoder使用struct符合Encodable协议的Swift编码可选字段.

默认设置是JSONEncoder使用encodeIfPresent方法,这意味着nil从Json中排除的值.

如何在不编写自定义encode(to encoder: Encoder)函数的情况下为单个属性覆盖此属性,我必须在其中实现所有属性的编码(如本文在"自定义编码"下建议的那样)?

例:

struct MyStruct: Encodable {
    let id: Int
    let date: Date?
}

let myStruct = MyStruct(id: 10, date: nil)
let jsonData = try JSONEncoder().encode(myStruct)
print(String(data: jsonData, encoding: .utf8)!) // {"id":10}
Run Code Online (Sandbox Code Playgroud)

encoding json ios swift codable

10
推荐指数
1
解决办法
2960
查看次数

Swift4中的Codable和XMLParser

使用Swift4,iOS11.1,Xcode9.1,

使用新的Swift4 typealiase"Codable"适用于JSON解码(如此此处或许多其他贡献中所述).但是,在XML解析方面,我找不到任何有关此"Codable"协议是否也可用于XML解码的信息.

我尝试使用XMLParser(可以在下面的代码中看到).但我没有使用"Codable"协议来简化XML解析过程.我怎么必须完全使用Codable协议来简化XML解析?

// the Fetching of the XML-data (excert shown here with a simple dataTask) :

        let myTask = session.dataTask(with: myRequest) { (data, response, error) in

        // check for error
        guard error == nil else {
            completionHandler(nil, error!)
            return
        }
        // make sure we got data in the response
        guard let responseData = data else {
            let error = XMLFetchError.objectSerialization(reason: "No data in response")
            completionHandler(nil, error)
            return
        }

        // the responseData is XML !!!!!!!!!!!!!! …
Run Code Online (Sandbox Code Playgroud)

decode xml-parsing swift4 codable

10
推荐指数
1
解决办法
4022
查看次数

如何在 Codable 结构中添加自定义瞬态属性

我遵循了按预期工作的 Codable 结构

struct VideoAlbum: Codable {


 let id, image: String?
 let video, mediaType: JSONNull?
 let type, deleted, createdOn: String?
 let modifiedOn: JSONNull?

  enum CodingKeys: String, CodingKey {
    case id, image, video
    case mediaType = "media_type"
    case type, deleted
    case createdOn = "created_on"
    case modifiedOn = "modified_on"
 }

}
Run Code Online (Sandbox Code Playgroud)

// MARK: 编码/解码助手

class JSONNull: Codable {
public init() {}

public required init(from decoder: Decoder) throws {
    let container = try decoder.singleValueContainer()
    if !container.decodeNil() {
        throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong …
Run Code Online (Sandbox Code Playgroud)

ios swift4 codable

10
推荐指数
1
解决办法
3224
查看次数

iOS Swift中可编码属性的通用类型

我需要获取一个用于解析JSON的结构的泛型变量

但是我得到的错误 类型'BaseJsonModel'不符合协议'Codable

下面是我的结构

  struct BaseJsonStruct<T>: Codable {
    let info: String
    let data: T
 }
Run Code Online (Sandbox Code Playgroud)

错误: - 类型'BaseJsonModel'不符合协议'Codable'

ios swift codable

10
推荐指数
1
解决办法
2550
查看次数

如何在目标c数据模型类中使用Codable协议?

我正在研究混合匹配的iOS源代码。我为快速数据模型类实现了可编码,这减少了编写解析器逻辑的负担。我试图使我的目标c类符合可编码协议,这又引发了一个错误“找不到'Codable'的协议声明”。有什么办法可以将此快速协议用于目标c类吗?还是有其他目标c api提供与Codable相同的功能?这个想法是使快速和客观c类之间的解析逻辑相同。

objective-c swift codable

9
推荐指数
1
解决办法
4906
查看次数

Swift 4 JSONEncoder 中的字典键顺序

是否可以将 Swift JSON 编码器配置为使用结构体属性的排序顺序作为 JSON 输出中字典键的排序顺序?默认情况下,它使用一些任意(但看似不是随机)的顺序,例如......

struct Example: Codable {
  let id: Int
  let name: String
  let createdAt: Date
  let comments: [String]
}
Run Code Online (Sandbox Code Playgroud)

... 结果是 ...

"example" : {
  "id" : 1,
  "name" : "Test",
  "comments" : [
    "Comment 1",
    "Comment 2"
  ],
  "createdAt" : 549539643.25327206
}
Run Code Online (Sandbox Code Playgroud)

我知道从语义上来说顺序并不重要,但我想保留它以用于调试目的。

json swift codable

9
推荐指数
1
解决办法
3648
查看次数

在 Swift 中实例化新 Codable 对象的最简单方法是什么?

我有一个 Codable 类:

class Task: Codable {
    var name: String
}
Run Code Online (Sandbox Code Playgroud)

当我尝试实例化它时:

let newTask = Task()
allTasks.append(newTask)
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

调用中缺少参数“from”的参数

我想要的只是将一个新对象(newTask)插入到一个数组中。什么是最简单的方法来做到这一点?

swift codable

9
推荐指数
2
解决办法
4782
查看次数

标签 统计

codable ×10

swift ×8

swift4 ×4

ios ×3

json ×3

decode ×1

encoding ×1

objective-c ×1

xml-parsing ×1