class ErrorObj: NSObject,Codable {
var numError:Int = 0
var DescriptionError = ""
}
class Response<T: Codable>: NSObject, Codable {
var error:ErrorObj!
var result:T!
func getResponse(errorObj:(ErrorObj)->Void,sucssesObj:(T)->Void) {
if error.numError != 0 {
errorObj(error)
} else{
sucssesObj(result)
}
}
}
错误:
由于“ T”,无法自动合成“可解码”。不符合“可降解” 协议需要类型为“可解码”的初始化程序“ init(from :)”
由于“ T”,无法自动合成“可解码”。不符合“可编码” 协议要求类型为'Encodable'的初始化程序'init(from:)'
答案 0 :(得分:0)
此问题是由于您将Response
的两个属性都声明为隐式未包装的可选内容(IOU)引起的。编译器无法为IOU属性自动生成Codable
所需的方法。
但是,无论如何都不需要进行这些借条。如果它们是响应中始终存在的必需属性,请将其设为非可选。如果可能会丢失它们,请将它们设置为Optional
(使用?
而不是!
)。
此外,Swift不是Objective-C。无需使您的类型继承自NSObject
。除非明确需要引用类型行为,否则还应该使用struct
而不是class
。除非明确需要能够对其进行变异,否则还应使所有属性不变。
struct ErrorObj: Codable {
let numError: Int
let description: String
}
struct Response<T: Codable>: Codable {
let error: ErrorObj
let result: T
func getResponse(errorObj: (ErrorObj) -> Void, successObj: (T) -> Void) {
if error.numError != 0 {
errorObj(error)
} else{
successObj(result)
}
}
}