gpt4 book ai didi

swift - 将 JSON 编码器与 Codable 类型的计算变量结合使用

转载 作者:行者123 更新时间:2023-11-30 11:24:52 26 4
gpt4 key购买 nike

凭借我的新手 swift 技能,我正在努力找出正确的 swift 语法来让这个 Playground 发挥作用。根据我尝试解决它的方式,我要么得到

Cannot invoke 'encode' with an argument list of type '(Encodable)'

这与这个问题Using JSON Encoder to encode a variable with Codable as type中解决的问题类似。或者我得到

' (T) -> ()' requires that 'Encodable' conform to 'Encodable'

我真的很感激有解释的解决方案

编辑为了提供更多上下文,我在这里尝试实现的模式是针对中间件路由器的。根据应用程序中所做的操作,路由器将构建网络请求。 codableParam 的目的是为用例提供一致的结构。因此,所有情况都将返回 nil 或 Codable 类型。

struct unityAuthenticationRequest: Codable {
var username : String
var password : String
}

enum test {
case volume
case num2
case num3

var codableParam: Encodable? {
switch self {
case .volume:
return unityAuthenticationRequest(username: "uname", password: "pwrods")
default:
return nil
}
}
}

func saveObject<T:Encodable>(_ object: T) {
let data = try? JSONEncoder().encode(object)
}

func dx<T: Codable>(fx: T) {
let datax = try? JSONEncoder().encode(fx)
}

let r = test.volume
saveObject(r.codableParam)

最佳答案

错误消息几乎可以告诉您发生了什么:

Fatal error: Optional<Encodable> does not conform to Encodable
because Encodable does not conform to itself.
You must use a concrete type to encode or decode.:
file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.74.1/src/swift/stdlib/public/core/Codable.swift, line 3960

但是修复起来很容易,只需像这样更改第一行:

var codableParam: unityAuthenticationRequest? {
switch self {
case .volume:
return unityAuthenticationRequest(username: "uname", password: "pwrods")
default:
return nil
}
}

现在您的参数确实具有具体类型,并且只需进行最少的语法更改即可满足要求。

我仍然很难弄清楚这种类型的代码如何以最容易理解的方式传达您的意图,但我们必须更多地了解您的意图才能对其进行改进。

关于swift - 将 JSON 编码器与 Codable 类型的计算变量结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com