我的案子似乎很简单。我试图编写漂亮的可重用代码来生成错误。
代码逻辑似乎很好。我们只在运行时访问初始化的属性。但编译器会抛出常见错误:
实例成员“jsonValue”不能用于类型“T”
这是我的密码:
import Foundation
protocol ResponseProtocol {
static var key: String { get }
var jsonValue: [String : Any] { get }
}
struct SuccessResponse {
let key = "success"
enum EmailStatus: ResponseProtocol {
case sent(String)
static let key = "email"
var jsonValue: [String : Any] {
switch self {
case .sent(let email): return [EmailStatus.key : ["sent" : email]]
}
}
}
func generateResponse<T: ResponseProtocol>(_ response: T) -> [String : Any] {
return [key : T.jsonValue]
}
}
我真的很想让这段代码起作用。”因为现在我有了这个的“硬编码”版本。
最佳答案
jsonValue是方法参数'response'的属性,而不是T的类属性
protocol ResponseProtocol {
static var key: String { get }
var jsonValue: [String : Any] { get }
}
struct SuccessResponse {
let key = "success"
enum EmailStatus: ResponseProtocol {
case sent(String)
static let key = "email"
var jsonValue: [String : Any] {
switch self {
case .sent(let email): return [EmailStatus.key : ["sent" : email]]
}
}
}
func generateResponse<T: ResponseProtocol>(_ response: T) -> [String : Any] {
return [key : response.jsonValue]
}
}
关于ios - Swift泛型函数接受枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48517886/