当前位置: 首页 > 面试题库 >

Swift可以将类/结构数据转换成字典吗?

李康安
2023-03-14
问题内容

例如:

class Test {
    var name: String;
    var age: Int;
    var height: Double;
    func convertToDict() -> [String: AnyObject] { ..... }
}

let test = Test();
test.name = "Alex";
test.age = 30;
test.height = 170;

let dict = test.convertToDict();

字典将包含以下内容:

{"name": "Alex", "age": 30, height: 170}

在Swift中有可能吗?

我是否可以访问像字典这样的类,例如可能使用:

test.value(forKey: "name");

或类似的东西?

谢谢。


问题答案:

您只需将计算属性添加到您的属性中struct即可返回Dictionary带有您的值的。请注意,Swift本机字典类型没有任何称为的方法value(forKey:)。您需要将您强制转换DictionaryNSDictionary

struct Test {
    let name: String
    let age: Int
    let height: Double
    var dictionary: [String: Any] {
        return ["name": name,
                "age": age,
                "height": height]
    }
    var nsDictionary: NSDictionary {
        return dictionary as NSDictionary
    }
}

您还可以Encodable按照@ColGraff发布的链接答案中的建议扩展协议,以使其对所有Encodable结构通用:

struct JSON {
    static let encoder = JSONEncoder()
}
extension Encodable {
    subscript(key: String) -> Any? {
        return dictionary[key]
    }
    var dictionary: [String: Any] {
        return (try? JSONSerialization.jsonObject(with: JSON.encoder.encode(self))) as? [String: Any] ?? [:]
    }
}
struct Test: Codable {
    let name: String
    let age: Int
    let height: Double
}

let test = Test(name: "Alex", age: 30, height: 170)
test["name"]    // Alex
test["age"]     // 30
test["height"]  // 170


 类似资料:
  • 本文向大家介绍sqlalchemy 将结果转换成字典,包括了sqlalchemy 将结果转换成字典的使用技巧和注意事项,需要的朋友参考一下 示例 在SQLAlchemy核心中,结果为RowProxy。如果您需要显式词典,可以致电dict(row)。 首先为示例进行设置: 然后从结果行创建字典:            

  • 问题内容: 我有一个Web API方法,可以将任意json有效内容接受到属性中。因此,我不知道会发生什么,但是我仍然需要将其转换为.NET类型。我想拥有一个以便可以按我想要的任何方式处理它。 我进行了很多搜索,但找不到任何东西,最终启动了一个麻烦的方法来进行此转换,一个键一个键,一个值一个值。有简单的方法吗? 输入-> 谢谢! 问题答案: 我最终使用了两个答案的混合,因为没有一个真正地钉住它。 T

  • 问题内容: 我在python中有一个命名的tuple类 我想将Town实例转换成字典。我不希望它与城镇中字段的名称或数量严格相关。 有没有一种方法可以编写它,以便我可以添加更多字段,或者传入完全不同的命名元组并获得字典。 我无法更改其他人代码中的原始类定义。因此,我需要以一个Town实例为例,并将其转换为字典。 问题答案: TL; DR:为此提供了一种方法。 这是用法的演示: 这是一个已记录的na

  • 字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。 注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。 键值对在字典中以这样的方式标记:d = {key1 : value1,

  • 本文向大家介绍Python实现列表转换成字典数据结构的方法,包括了Python实现列表转换成字典数据结构的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现列表转换成字典数据结构的方法。分享给大家供大家参考,具体如下: 排序用法: 希望本文所述对大家Python程序设计有所帮助。

  • 问题内容: 有没有一种方法可以将Swift结构的地址转换为无效的UnsafeMutablePointer? 我尝试了一下但没有成功: 谢谢! 编辑: 我实际上正在尝试 将上下文 移植到Swift中 学习CoreAudio 的第一个示例。 这是我到目前为止所做的: 我正在努力留在Swift中,但是如果事实证明这是一个问题而不是优势,那么我最终将链接到C函数。 编辑:底线 如果您因为试图在Swift中