首页 > 解决方案 > Codable - arrayPropety [AnyObject]:如果没有上下文类型,则无法解析对成员“数据”的引用

问题描述

设置可编码类。AnyObjects 数组正在创建编译错误:

如果没有上下文类型,则无法解析对成员“数据”的引用

class ClassA<T>: NSObject, Codable {

    // MARK: - Properties

    let title: String
    let data: [T] // data is an array of either Codable objects of ClassB or ClassC. 

    // MARK: - Keyes

    private enum CodingKeys: String, CodingKey {
        case title
        case data
    }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)

        title = try container.decode(String.self, forKey: .title)
        data = [T]()
    }

    func encode(to encoder: Encoder) throws {

        var container = encoder.container(
            keyedBy: CodingKeys.self
        )

        try container.encode(title, forKey: .title)
        try container.encode(data, forKey: .data) // Compilation error: Reference to member 'data' cannot be resolved without a contextual type
    }
}

标签: swiftgenericscodable

解决方案


数据类型T必须符合Encodable/Codable变化

class ClassA<T:Codable>: NSObject, Codable {

编译器不知道数组泛型元素是否符合Encodable,因此错误


推荐阅读