相关疑难解决方法(0)

Swift中Enum的默认值

我有一个enum:

public enum PersonType:String {

 case Cool                       = "cool"
 case Nice                       = "rude"
 case SoLazy                     = "so-lazy"

 public var description: String {
    switch self {
    case .Cool:
        return "Cool person"
    case .Nice:
        return "Nice person"
    case .SoLazy:
        return "its so lazy person"
    }
}


 public var typeImage: String {
    switch self {
    case .Cool:
        return "cool.png"
    case .Nice:
        return "img_nice.png"
    case .Solazy:
        return "lazy.png"
    }
   }  

}
Run Code Online (Sandbox Code Playgroud)

问题我不知道所有的人类型键,所以我需要处理类型为人的默认情况,并给它描述将是它的关键像"so-lazy"和默认图像.

假设我从Web服务获得此结果:

[
    {
        name: "john",
        key: "cool"
    },
    {
        name: …
Run Code Online (Sandbox Code Playgroud)

enums ios data-structures swift swift2

11
推荐指数
6
解决办法
2万
查看次数

Swift Codable - 如何以可失败的方式初始化可选的枚举属性

我正在尝试Codable为一个对象采用协议,该对象必须从我的 Web 服务返回的 JSON 实例化以响应 API 调用之一。

其中一个属性是枚举类型,可选:nil表示没有选择 定义的任何选项enum

enum常数Int为基础的,并在开始1不是 0

class MyClass: Codable {

    enum Company: Int {
        case toyota = 1
        case ford
        case gm
    } 
    var company: Company?
Run Code Online (Sandbox Code Playgroud)

这是因为0相应 JSON 条目上的值是为“未设置”保留的;即nil在设置初始化company属性时应该映射到它。

Swift 的 enum 初始值设定项init?(rawValue:)提供了开箱即用的此功能:Int与任何情况下的原始值都不匹配的参数将导致初始值设定项失败并返回 nil。此外,Int可以Codable通过在类型定义中声明它来使基于 (和 String) 的枚举符合:

enum Company: Int, Codable {
    case toyota = …
Run Code Online (Sandbox Code Playgroud)

enums optional swift codable

6
推荐指数
3
解决办法
3516
查看次数

将未知的 Encodable 枚举值解码为默认值

我必须像这样反序列化一个 JSON 字符串:

{ "name" : "John Smith", "value" : "someValue" }
Run Code Online (Sandbox Code Playgroud)

在 Swift 4 中,“value”应该是一个枚举,整个对象是一个结构体,如下所示:

struct MyType {
    name: String?
    value: Value?
}
Run Code Online (Sandbox Code Playgroud)

在未来的某个时候,后端可能会添加新的枚举值,所以我认为进行一些回退是明智的。

我以为我可以创建一个枚举

enum Value {
    case someValue
    case someOtherValue
    case unknown(value: String)
}
Run Code Online (Sandbox Code Playgroud)

但我无法解决如何反序列化该枚举并使其工作。以前我只是使用String枚举,但反序列化未知值会引发错误。

是否有一种简单的方法可以使其工作,或者我应该将值反序列化为 aString并在结构中创建一个自定义 getter 并使用 switch 语句返回其中一种情况(甚至可能不是在结构本身中,而是在我的视图模型中)?

enums json deserialization swift codable

5
推荐指数
1
解决办法
1152
查看次数

Swift - 从未包含在案例中的 json 字符串解码的枚举有一个未知的案例

对于给定的 JSON,如下所示:

{
    "store": {
        "animals": [
            {
                "type": "dog"
            },
            {
                "type": "cat"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以用 enum 解析它,type如下所示:

final class AnimalStore: Decodable {
    let store: Store
}

extension AnimalStore {
    struct Store: Decodable {
        let animals: [Animal]
    }
}

extension AnimalStore.Store {
    struct Animal: Decodable {
        let type: AnimalType?
    }
}

extension AnimalStore.Store.Animal {
    enum AnimalType: String, Decodable {
        case dog = "dog"
        case cat = "cat"
        //case unknown = how such a case could …
Run Code Online (Sandbox Code Playgroud)

enums json swift decodable

0
推荐指数
1
解决办法
973
查看次数