如何创建采用Any类型并输出JSON字符串化版本的函数?

mpc75

我一遍又一遍地使用以下代码将数据整形为JSON感到有点困惑,并希望有一个本机可重用的函数来实现可以传递任何东西的相同功能,它将检查它是否可编码,或者输出nil或字符串:

let encoder = JSONEncoder()
let formatter = DateFormatter()
formatter.dateStyle = .medium
encoder.dateEncodingStrategy = .formatted(formatter)
            
guard let jsonDateData = try? encoder.encode(dateOfApproval) else {return}
guard let myDateString = String(data: jsonDateData, encoding: .utf8) else {return}

问题的核心似乎是我无法检查发送的Any对象是否可编码,而让我检查特定类型(如下所示):

func shapeData(dataToShape: Any)-> String? {
    let encoder = JSONEncoder()
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    encoder.dateEncodingStrategy = .formatted(formatter)
    
    if let hi = dataToShape as? String { // I'd prfer to be able to check if it's encodable here instead of a specific type
        guard let jsonDateData = try? encoder.encode(hi) else {return nil}
        guard let myDateString = String(data: jsonDateData, encoding: .utf8) else {return nil}
        return myDateString
    } else {
        return nil
    }
}

我尝试过,if dataToShape is Encodable但是那也不起作用。

pawello2222

您可以使函数通用。这样,您的dataToShape参数将具有某种通用类型,您可以将其限制为Encodable

func shapeData<T>(dataToShape: T) -> String? where T: Encodable {
    let encoder = JSONEncoder()
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    encoder.dateEncodingStrategy = .formatted(formatter)
    
    guard let jsonDateData = try? encoder.encode(dataToShape) else {return nil}
    guard let myDateString = String(data: jsonDateData, encoding: .utf8) else {return nil}
    return myDateString
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建包含参数化类型的字符串和函数的映射

来自分类Dev

无法从JSON字符串实例化类型的值;没有单字符串构造函数/工厂方法

来自分类Dev

无法从JSON字符串实例化类型的值;没有单字符串构造函数/工厂方法

来自分类Dev

从字符串对象列表创建输出 json 文件

来自分类Dev

JSON字符串化输出到多行

来自分类Dev

如何在C ++中围绕任意函数创建字符串参数化的包装器?

来自分类Dev

无法从 JSON 字符串实例化 [简单类型,类 org.joda.time.LocalDateTime] 类型的值;没有单字符串构造函数/工厂方法

来自分类Dev

返回字符串,如何格式化输出

来自分类Dev

如何格式化字符串输出java

来自分类Dev

根据类型反序列化json字符串

来自分类Dev

无法从json字符串实例化类型的值

来自分类Dev

无法从json字符串实例化类型的值

来自分类Dev

如何使用“ any()”函数搜索多个子字符串?

来自分类Dev

如何创建可以为字符串或整数的类型?

来自分类Dev

如何从curl json输出获取特定字符串

来自分类Dev

如何在Javascript中将字符串输出为json?

来自分类Dev

如何对Map类型的对象进行字符串化

来自分类Dev

如何初始化未知的字符串类型?

来自分类Dev

敲除数据绑定文本到函数正在返回函数的字符串化版本

来自分类Dev

以字符串形式获取函数的输出

来自分类Dev

如何从函数返回格式化的字符串?

来自分类Dev

如何格式化PHP函数返回的字符串

来自分类Dev

如何在C ++中采用多行字符串输入?

来自分类Dev

从字符串动态创建字符串文字类型

来自分类Dev

如何使用nlohmann json从字符串获取值类型?

来自分类Dev

如何更改JSON字符串中的对象类型?

来自分类Dev

如何将参数传递给我的 url 以获取采用字符串参数的 POST 函数?

来自分类Dev

使用JSON boost序列化创建JSON字符串时,如何获取名称/值对?

来自分类Dev

无法创建字符串文字类型

Related 相关文章

  1. 1

    创建包含参数化类型的字符串和函数的映射

  2. 2

    无法从JSON字符串实例化类型的值;没有单字符串构造函数/工厂方法

  3. 3

    无法从JSON字符串实例化类型的值;没有单字符串构造函数/工厂方法

  4. 4

    从字符串对象列表创建输出 json 文件

  5. 5

    JSON字符串化输出到多行

  6. 6

    如何在C ++中围绕任意函数创建字符串参数化的包装器?

  7. 7

    无法从 JSON 字符串实例化 [简单类型,类 org.joda.time.LocalDateTime] 类型的值;没有单字符串构造函数/工厂方法

  8. 8

    返回字符串,如何格式化输出

  9. 9

    如何格式化字符串输出java

  10. 10

    根据类型反序列化json字符串

  11. 11

    无法从json字符串实例化类型的值

  12. 12

    无法从json字符串实例化类型的值

  13. 13

    如何使用“ any()”函数搜索多个子字符串?

  14. 14

    如何创建可以为字符串或整数的类型?

  15. 15

    如何从curl json输出获取特定字符串

  16. 16

    如何在Javascript中将字符串输出为json?

  17. 17

    如何对Map类型的对象进行字符串化

  18. 18

    如何初始化未知的字符串类型?

  19. 19

    敲除数据绑定文本到函数正在返回函数的字符串化版本

  20. 20

    以字符串形式获取函数的输出

  21. 21

    如何从函数返回格式化的字符串?

  22. 22

    如何格式化PHP函数返回的字符串

  23. 23

    如何在C ++中采用多行字符串输入?

  24. 24

    从字符串动态创建字符串文字类型

  25. 25

    如何使用nlohmann json从字符串获取值类型?

  26. 26

    如何更改JSON字符串中的对象类型?

  27. 27

    如何将参数传递给我的 url 以获取采用字符串参数的 POST 函数?

  28. 28

    使用JSON boost序列化创建JSON字符串时,如何获取名称/值对?

  29. 29

    无法创建字符串文字类型

热门标签

归档