我有以下错误
ios - 在这种情况下,“JSONEncoder”/“JSONDecoder”对于类型查找是不明确的-LMLPHP
我不知道为什么我会得到这个,我怎么能解决它?
请帮忙!
注意:我使用的是Xcode版本9.3.1和Swift4,
我试过使用jsoncoble.JSONEncoder和jsoncoble.JSONDecoder,但它不起作用。
代码如下:

import Foundation
import JSONCodable

extension JSONEncoder {
    func encode(_ value: CGAffineTransform, key: String) {
        object[key] = NSValue(cgAffineTransform: value)
    }

    func encode(_ value: CGRect, key: String) {
        object[key] = NSValue(cgRect: value)
    }

    func encode(_ value: CGPoint, key: String) {
        object[key] = NSValue(cgPoint: value)
    }
}

extension JSONDecoder {

    func decode(_ key: String, type: Any.Type) throws -> NSValue {
        guard let value = get(key) else {
            throw JSONDecodableError.missingTypeError(key: key)
        }
        guard let compatible = value as? NSValue else {
            throw JSONDecodableError.incompatibleTypeError(key: key, elementType: type(of: value), expectedType: NSValue.self)
        }
        guard let objcType = String(validatingUTF8: compatible.objCType), objcType.contains("\(type)") else {
            throw JSONDecodableError.incompatibleTypeError(key: key, elementType: type(of: value), expectedType: type)
        }
        return compatible
    }

    func decode(_ key: String) throws -> CGAffineTransform {
        return try decode(key, type: CGAffineTransform.self).cgAffineTransformValue
    }

    func decode(_ key: String) throws -> CGRect {
        return try decode(key, type: CGRect.self).cgRectValue
    }

    func decode(_ key: String) throws -> CGPoint {
        return try decode(key, type: CGPoint.self).cgPointValue
    }
}

最佳答案

JSONCodable还声明了JSONEncoder/JSONDecoder类,因此编译器不知道要扩展哪些类:标准类还是库中的类。
告诉编译器通过用模块名预先装入类来扩展哪个类,应该消除歧义。

import Foundation
import JSONCodable

extension JSONCodable.JSONEncoder {
    // extension code
}

extension JSONCodable.JSONDecoder {
    // extension code
}

但是,这对于这个特定的库不起作用,因为库声明了一个同名的协议(JSONCodable)。因此,您只需要显式地从模块导入两个类(有关详细信息,请参见this SO post):
import Foundation
import class JSONCodable.JSONEncoder
import class JSONCodable.JSONDecoder

extension JSONCodable.JSONEncoder {
    // your code
}

extension JSONCodable.JSONDecoder {
    // your code
}

关于ios - 在这种情况下,“JSONEncoder”/“JSONDecoder”对于类型查找是不明确的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51759671/

10-13 00:19