我设法让JSON和plist编码和解码都能工作,但只能通过直接调用特定对象上的encode/decode函数.

例如:

struct Test: Codable {
    var someString: String?
}

let testItem = Test()
testItem.someString = "abc"

let result = try JSONEncoder().encode(testItem)

这很好,没有问题.

然而,我试图得到一个只接受Codable协议一致性作为类型并保存该对象的函数.

func saveObject(_ object: Encodable, at location: String) {
    // Some code

    let data = try JSONEncoder().encode(object)

    // Some more code
}

这会导致以下错误:

无法使用类型为"(Encodable)"的参数列表调用"encode"

看看encode函数的定义,它似乎应该可以接受Encodable,除非Value是我不知道的奇怪类型.

open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable

推荐答案

使用限制为Encodable的泛型类型

func saveObject<T : Encodable>(_ object: T, at location: String) {
    //Some code

    let data = try JSONEncoder().encode(object)

    //Some more code
}

Swift相关问答推荐

同步问题,发送Api Call之前未设置idToken

map 视图上的SwiftUI渐变折线

";async let和";async之间的差异让我们等待";

使用SWIFT宏从另一个枚举添加 case

如何在realityKit中反转USDZ动画

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

如何将函数参数(字符串文字)标记为可本地化?

文件命名&NumberForMatter+扩展名&:含义?

Swift数据关系

如何删除 macOS 中的所有命令?

获取具有关联类型的协议的self

使 Picker 与其他 BinaryInteger 类型兼容

自定义选取器的出现导致其他视图重新排列

在 Swift 5.5 中编写同步和异步函数

调用从 SwiftUI 视图传递到 PageViewController.Coordinator 的函数

为什么更改属性后动画会加速? SwiftUI

更新我的 pod 导致 GoogleDataTransport Umbrella 标头出现错误

为什么'nil' 与 Swift 3 中的 'UnsafePointer' 不兼容?

Swift 2.0 中的 do { } catch 不处理从这里抛出的错误

UITableView 布局在 push segue 和 return 上搞砸了. (iOS 8、Xcode beta 5、Swift)