gpt4 book ai didi

swift - 实例方法要求 'NSObject'符合

转载 作者:行者123 更新时间:2023-11-28 07:28:52 25 4
gpt4 key购买 nike

我扩展了 RxSwift 的 Observable,我在 Moya 中使用它,所以我这样写

/// JSON map to object
/// - returns: Observable<T>
func jsonMapObject<T: EVReflectable>(type: T.Type, forKeyPath: String? = nil) -> Observable<Result<T, ORMError>> {

return self.map { rawResult in

guard let result = rawResult as? Result<JSON, ORMError> else {
return .failure(ORMError.ORMParseJSONError)
}

switch result {
case let .success(json):

guard json != JSON.null,
let dict = json.dictionaryObject else {
return .failure(ORMError.ORMParseJSONError)
}

guard let object: T = self.dictMap(from: dict) as T else {
return .failure(ORMError.ORMCouldNotMakeObjectError)
}

return .success(object)

case let .failure(error):
return .failure(error)
}

}
}

这样写完这段代码后,我在编辑器中收到一条错误消息

Instance method 'dictMap(from:forKeyPath:)' requires that 'NSObject' conform to 'EVReflectable'

我不知道如何继续,因为这个错误不会消失

我的dictMap写成

///

Create the object from the dictionary
internal func dictMap<T: NSObject>(from: NSDictionary?, forKeyPath: String? = nil) -> T where T: EVReflectable{
let instance: T = T()
let parsedObject: T = ((instance.getSpecificType(from ?? NSDictionary()) as? T) ?? instance)
let _ = EVReflection.setPropertiesfromDictionary(from ?? NSDictionary(), anyObject: parsedObject, forKeyPath: forKeyPath)
// if self.statusCode > 300 {
// instance.addStatusMessage(DeserializationStatus.Custom, message: "HTTP status code: \(self.statusCode)")
// }
return parsedObject
}

最佳答案

你的函数 func dictMap<T: NSObject>(from: NSDictionary?, forKeyPath: String? = nil) -> T where T: EVReflectable要求 T 是一个 NSObject 并符合 EVReflectable。为了做到这一点,NSObject 必须符合 EVReflectable。

您可能只需要删除 : NSObject>从上面:

func dictMap<T>(from: NSDictionary?, forKeyPath: String? = nil) -> T where T: EVReflectable

关于swift - 实例方法要求 'NSObject'符合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55636505/

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