问题描述
我发现自己经常使用try JSONDecoder().decode(Foo.self,from: Baz.foo.data)
,但我真的不喜欢它,因为就我而言,我知道Baz.foo.data
始终可以投射到Foo
上, Baz.bar.data
-到Bar
。我想通过定义要在Baz
本身中解析后得到的类型来简化代码,以使其变为类似try JSONDecoder().decode(from: Baz.foo.data)
或更好的形式-Baz.foo.decoded
。我想到的代码如下:
struct Foo: Decodable {
var foo: String
}
struct Bar: Decodable {
var bar: String
}
enum Baz<T> where T: Decodable {
case foo,bar
var decoded: T {
try! JSONDecoder().decode(self.type,from: self.data)
}
var type: T.Type {
switch self {
case .foo:
return Foo.self as! T.Type
case .bar:
return Bar.self as! T.Type
}
}
var data: Data {
switch self {
case .foo:
return #"{"foo": "Foo string"}"#.data(using: .utf8)!
case .bar:
return #"{"bar": "Bar string"}"#.data(using: .utf8)!
}
}
}
但是要使用它,我仍然需要手动指定T
,即:Baz<Foo>.foo.decoded
。有没有办法让Swift自己指定它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)