Метод экземпляра требует, чтобы NSObject соответствовал - PullRequest
1 голос
/ 11 апреля 2019

Я расширил Observable для RxSwift, и я использую его с Мойей, поэтому я выписал его так:

/// 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)
            }

        }
    }

после написания этого кода как такового, в редакторе появляется ошибка: 1004 *

Метод экземпляра 'dictMap (from: forKeyPath :)' требует, чтобы 'NSObject' соответствовал '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
    }

1 Ответ

0 голосов
/ 15 апреля 2019

Ваша функция func dictMap<T: NSObject>(from: NSDictionary?, forKeyPath: String? = nil) -> T where T: EVReflectable Требует, чтобы T был объектом NSO и соответствовал EVReflectable.Для этого NSObject должен соответствовать EVReflectable.

Вероятно, вам просто нужно удалить : NSObject> из вышеперечисленного:

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