Json 对无效关联类型的引用';迭代器';类型为';戴尔瑞<;T>';

Json 对无效关联类型的引用';迭代器';类型为';戴尔瑞<;T>';,json,swift,xcode,parsing,Json,Swift,Xcode,Parsing,我试图在下面教程的帮助下解析 它给了我一个错误:对“DecodedArray”类型的无效关联类型“Iterator”的引用 ** ** 导入UIKit 学生:可解码{ 让firstName:String? 让lastName:String? // 1 //定义学生ID 让学生听一听 // 2 //定义用于解码的编码键 枚举编码键:编码键{ 案例名 案例姓氏 } init(来自解码器:解码器)抛出{ let container=try decoder.container(keyedBy:Codi

我试图在下面教程的帮助下解析

它给了我一个错误:对“DecodedArray”类型的无效关联类型“Iterator”的引用 **

**

导入UIKit
学生:可解码{
让firstName:String?
让lastName:String?
// 1
//定义学生ID
让学生听一听
// 2
//定义用于解码的编码键
枚举编码键:编码键{
案例名
案例姓氏
}
init(来自解码器:解码器)抛出{
let container=try decoder.container(keyedBy:CodingKeys.self)
// 3
//解码firstName和lastName
firstName=try container.decode(String.self,forKey:CodingKeys.firstName)
lastName=try container.decode(String.self,forKey:CodingKeys.lastName)
// 4
//从编码路径中提取studentId
studentId=container.codingPath.first!.stringValue
}
}
结构解码Darray:可解码{
// ***
typealias DecodedArrayType=[T]
私有变量数组:DecodedArrayType
//定义从JSONDecoder创建解码容器所需的DynamicCodeKeys类型
私有结构dynamiccodingkey:CodingKey{
//用于字符串键控词典
var stringValue:String
初始化?(stringValue:String){
self.stringValue=stringValue
}
//用于整数键控字典
var intValue:Int?
初始化?(intValue:Int){
//我们不使用这个,因此只返回nil
归零
}
}
init(来自解码器:解码器)抛出{
//使用DynamicCodingKeys创建解码容器
//容器将包含所有JSON第一级密钥
let container=try decoder.container(keyedBy:DynamicCodingKeys.self)
var tempArray=DecodedArrayType()
//循环遍历容器中的每个键
对于容器中的密钥。allKeys{
// ***
//使用键解码T并将解码的T对象保留在tempArray中
让decodedObject=try container.decode(T.self,forKey:DynamicCodingKeys(stringValue:key.stringValue)!)
tempArray.append(decodedObject)
}
//完成对所有T对象的解码。从而将tempArray分配给array。
数组=临时数组
}
}
结构食品:可解码{
let name:String
let类别:字符串
枚举编码键:编码键{
案例名称
}
init(来自解码器:解码器)抛出{
let container=try decoder.container(keyedBy:CodingKeys.self)
//译名
name=try container.decode(String.self,forKey:CodingKeys.name)
//从编码路径中提取类别
category=container.codingPath.first!.stringValue
}
}
Darray扩展:集合{
//必需的嵌套类型,告诉Swift我们的集合包含什么
typealias索引=DecodedArrayType.Index
typealias元素=DecodedArrayType.Element
//集合的上界和下界,用于迭代
var startIndex:Index{return array.startIndex}
var endIndex:Index{return array.endIndex}
//必需的下标,基于字典索引
下标(index:index)->Iterator.Element{
获取{返回数组[索引]}
}
//对“DecodedArray”类型的无效关联类型“迭代器”的引用
//方法,该方法在迭代时返回下一个索引
func index(在i:index之后)->index{
返回array.index(在:i之后)
}
}

这篇文章写得很晚,我自己也遇到了这个问题。要解决此问题,只需替换

extension DecodedArray: Collection {
...
    subscript(index: Index) -> Iterator.Element {
        get { return array[index] }
    }
}


很晚才发到这个帖子,我自己也遇到了这个问题。要解决此问题,只需替换

extension DecodedArray: Collection {
...
    subscript(index: Index) -> Iterator.Element {
        get { return array[index] }
    }
}


对我来说很好(Swift 5.2)。你使用的是什么版本的Swift?你试过食物样本吗?对我来说很好(Swift 5.2)。你用的是什么版本的Swift?你试过食物样本吗?
extension DecodedArray: Collection {
...
    subscript(index: Index) -> Iterator.Element {
        get { return array[index] }
    }
}
subscript(position: DecodedArrayType.Index) -> DecodedArrayType.Element {
    get { return array[position]}
}