标签: codable

将 Firebase 数据快照转换为可编码的 JSON 数据

我正在使用 Firebase 数据库,并且正在尝试使用NSObject. 我NSUnknownKeyException在运行应用程序时收到错误,导致它崩溃。

NSObject:

class WatchList: NSObject {

    var filmid: Int?

}
Run Code Online (Sandbox Code Playgroud)

火力基地代码:

class WatchList: NSObject {

    var filmid: Int?

}
Run Code Online (Sandbox Code Playgroud)

我不确定是什么原因造成的。

此外,为了加强这方面的办法就是让他们借此数据,而不是使用NSObject的,使用的方式Codable,并JSONDecoder与火力地堡数据?

json firebase swift codable

4
推荐指数
2
解决办法
3240
查看次数

结果类型通用参数“T”无法快速推断 5

我试图了解我可以在协议中使用多少泛型。我的想法如下:

protocol Network {
    func fetchCodable<T:Codable>(urlRequest:URLRequest, completion:@escaping (Result<T,Error>)->Void)

}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个名为 AppNetwork 的类来实现网络协议。

extension AppNetwork:Network{
    func fetchCodable<T>(urlRequest: URLRequest, completion: @escaping (Result<T, Error>) -> Void) where T : Decodable, T : Encodable {

        URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in

            if let error = error {
                completion(.failure(error))
                return
            }

            guard let data = data else{
                completion(.failure(AppNetworkError.dataCorrupted))
                return
            }

            do {
                let response = try JSONDecoder().decode(T.self, from: data)
                completion(.success(response))
            }
            catch let decodeError{
                completion(.failure(decodeError))
            }

        }.resume()


    }
Run Code Online (Sandbox Code Playgroud)

此类是 NetworkHelper 的一部分,它实现了检索数据的功能,例如:

class NetworkHelper{
    let …
Run Code Online (Sandbox Code Playgroud)

generics swift codable swift5

4
推荐指数
1
解决办法
1356
查看次数

如果我想从 Codable 中排除某些属性,为什么这些属性必须是可选的?

我有以下内容struct

struct Checklist : Codable {
    let id: Int64
    var text: String?
    var checked: Bool
    var visible: Bool
    var version: Int64

    private enum CodingKeys: String, CodingKey {
        case id
        case text
        case checked
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到编译器错误

类型“清单”不符合“可解码”协议

我可以解决的唯一方法是将排除的属性更改为可选。

struct Checklist : Codable {
    let id: Int64
    var text: String?
    var checked: Bool
    var visible: Bool?
    var version: Int64?

    private enum CodingKeys: String, CodingKey {
        case id
        case text
        case checked
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以知道为什么会这样吗?这是解决此类编译器错误的唯一正确方法吗?

swift codable

4
推荐指数
1
解决办法
505
查看次数

Swift:有办法快速调试可解码对象

我有一个来自 20 个领域的对象。当我从服务器获取 json 时,我收到有关 json 解码的错误。

有一种方法可以快速找出哪个字段有问题,而不是删除所有字段并将其一个接一个放回以找出哪个字段有问题。

json swift codable

4
推荐指数
3
解决办法
2164
查看次数

在 swift 中使用 UUID() 和 json

我在网上找到了在 json 文件中使用硬编码 uuid 的示例,并且这些示例非常适合我,但是当我在应用程序中添加从 json 数组中删除项目的功能时,我需要动态创建这些 uuid

这是我的json文件(list.json),它曾经有硬编码的id,如“id”:1并且有效(当我使用int作为ids时)

[
  {
    "name": "Dune",
    "author": "Frank Herbert",
    "page": "77"
  },
  {
    "name": "Ready Player One",
    "author": "Ernest Cline",
    "page": "234"
  },
  {
    "name": "Murder on the Orient Express",
    "author": "Agatha Christie",
    "page": "133"
  }
]
Run Code Online (Sandbox Code Playgroud)

这是我的结构(Book.swift)

struct Book: Hashable, Codable, Identifiable {
    var id = UUID()
    var name: String
    var author: String
    var page: String
}
Run Code Online (Sandbox Code Playgroud)

当我使用此结构和代码(Data.swift)解码我的 json 文件时...

let bookData: [Book] = load("list.json")

func load<T: Decodable>(_ filename: String) -> T …
Run Code Online (Sandbox Code Playgroud)

json swift codable decodable

4
推荐指数
1
解决办法
4717
查看次数

Swift Codable-解码嵌套字典

可以说我有一本这样的字典:

{"user_data":{"id":3,"name":"Damian D","email":"aaa@aaa.pl"},"status":true}
Run Code Online (Sandbox Code Playgroud)

我如何使用Codable协议将其解码user_datastruct

struct User: Codable {
    private enum CodingKeys: String, CodingKey {
        case id
        case username = "name"
        case email
    }

    let id:       Int
    let username: String
    let email:    String
}
Run Code Online (Sandbox Code Playgroud)

我是否需要将此子词典转换为数据,还是有更简单的方法?

serialization swift swift4 codable

3
推荐指数
1
解决办法
1877
查看次数

Swift4,JSON,keyNotFound,没有与key关联的值

我需要做Sunset Sunrise App,这是我的代码.但我有这个错误:

序列化json时出错:keyNotFound(Sunrise_Sunset.SunPosition.Results.(CodingKeys in _B4291256871B16D8D013EC8806040532).sunrise,Swift.DecodingError.Context(codingPath:[],debugDescription:"没有与键日出相关的值(\"sunrise \").", underlyingError:nil))

我不明白如何解决它.也许有人有这个问题.我将不胜感激任何帮助)这是API,我有:https://sunrise-sunset.org/api

struct SunPosition: Codable {
struct Results: Codable {
    let sunrise: String
    let sunset: String
    let solarNoon: String
    let dayLenght: String
    let civilTwilightBegin: String
    let civilTwilightEnd: String
    let nauticalTwilightBegin: String
    let nauticalTwilightEnd: String
    let astronomicalTwilightBegin: String
    let astronomicalTwilightEnd: String

    enum CodingKey:String, Swift.CodingKey {
        case sunrise = "sunrise"
        case sunset = "sunset"
        case solarNoon = "solar_noon"
        case dayLenght = "day_length"
        case civilTwilightBegin = "civil_twilight_begin"
        case civilTwilightEnd = "civil_twilight_end"
        case nauticalTwilightBegin …
Run Code Online (Sandbox Code Playgroud)

json swift4 codable

3
推荐指数
1
解决办法
7329
查看次数

使用Swift Codable从JSON数组中提取数据

我有这样的JSON响应:

在此处输入图片说明

我目前将可解码结构设计如下:

    struct PortfolioResponseModel: Decodable {
    var dataset: Dataset

    struct Dataset: Decodable {
        var data: Array<PortfolioData> //I cannot use [Any] here...

        struct PortfolioData: Decodable {
            //how to extract this data ?
        }
    }
   }
Run Code Online (Sandbox Code Playgroud)

问题是,如何提取数组中的数据,该数组的值可以为Double或String。

这是在操场上进行这项工作的示例字符串:

   let myJSONArray =
   """
   {
   "dataset": {
   "data": [
    [
   "2018-01-19",
   181.29
   ],
   [
   "2018-01-18",
   179.8
   ],
   [
   "2018-01-17",
   177.6
   ],
   [
   "2018-01-16",
   178.39
   ]
   ]
   }
   }
   """
Run Code Online (Sandbox Code Playgroud)

提取数据:

do {
    let details2: PortfolioResponseModel = try JSONDecoder().decode(PortfolioResponseModel.self, from: myJSONArray.data(using: .utf8)!)
    //print(details2) 
    //print(details2.dataset.data[0]) //somehow …
Run Code Online (Sandbox Code Playgroud)

json swift swift4 codable decodable

3
推荐指数
1
解决办法
4212
查看次数

仅使用Swift 4 Codable解码JSON数据中的数组

我正在使用Swift 4,Codable并且正在从Web服务接收以下JSON:

{
    "status": "success",
    "data": {
        "time": "00:02:00",
        "employees": [
            {
                "id": 001,
                "name": "foo"
            }, 
            {
                "id": 002,
                "name": "bar"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我只想将employee数组解码为员工对象(time属性将仅保存一次),但是没有任何效果。
我读了很多有关Swift 4的资料,Codable但不知道如何解码该数组。

编辑:我的员工班级:

import Foundation

struct Employee: Codable {
    var id: Int
    var time: Date

    enum CodingKeys: String, CodingKey {
        case id = "id"
        case time = "time"
    }
}
Run Code Online (Sandbox Code Playgroud)

要求:

  Alamofire.SessionManager.default.request(Router.syncUsers)
            .validate(contentType: ["application/json"])
            .responseJSON { response in
                if response.response?.statusCode == 200 {
        guard let jsonDict = response as? …
Run Code Online (Sandbox Code Playgroud)

swift swift4 codable

3
推荐指数
1
解决办法
3282
查看次数

如何使ObservableObject符合Codable协议?

在SwiftUI beta 5中,Apple引入了@Published批注。该注释当前阻止此类符合Codable协议。

如何符合这些协议,以便可以将此类编码和解码为JSON?您现在可以忽略image属性。

class Meal: ObservableObject, Identifiable, Codable {

    enum CodingKeys: String, CodingKey {
        case id
        case name
        case ingredients
        case numberOfPeople
    }

    var id = Globals.generateRandomId()
    @Published var name: String = "" { didSet { isInputValid() } }
    @Published var image = Image("addImage")
    @Published var ingredients: [Ingredient] = [] { didSet { isInputValid() } }
    @Published var numberOfPeople: Int = 2
    @Published var validInput = false

    func isInputValid() {
        if name != "" && ingredients.count > 0 { …
Run Code Online (Sandbox Code Playgroud)

swift codable swiftui

3
推荐指数
4
解决办法
568
查看次数

标签 统计

codable ×10

swift ×9

json ×5

swift4 ×4

decodable ×2

firebase ×1

generics ×1

serialization ×1

swift5 ×1

swiftui ×1