gpt4 book ai didi

具有可选数组的 Swift 4 自定义通用结构表现奇怪吗?

转载 作者:可可西里 更新时间:2023-11-01 01:18:28 25 4
gpt4 key购买 nike

我正在将一个更大的代码库迁移到 Swift 4。它包括一个实现矩阵的自定义类型。在 Swift 3.1 中,一切都按预期运行良好。

我能够将问题减少到两个小代码块。第一个定义结构:

struct Matrix<Element> {
var array:[Element?] = []

mutating func setup(repeatedValue:Element) {
let fooTemp = Array<Element?>(repeating: repeatedValue, count: 10)
self.array = fooTemp
}
}

当我添加 Sequence 时,问题本身就来了实现:

extension Matrix: Sequence {
typealias Iterator = AnyIterator<Element?>

func makeIterator() -> Iterator {
return AnyIterator(array.makeIterator())
}
}

一旦Sequence实现是代码的一部分,我在 self.array = fooTemp 行遇到编译器错误:

Cannot assign value of type '[Element??]' to type '[_?]'

我知道,我可以使用 let fooTemp = Array<Element> 解决这个问题在代码中。类型推断不遵守这一点,并使 fooTemp 成为 Array<Element?>。 .

这是怎么回事?编译器恶作剧?

此问题也出现在 Swift 3.2 中。

最佳答案

Sequence 协议(protocol)定义

/// A type that provides the sequence's iteration interface and
/// encapsulates its iteration state.
associatedtype Element where Self.Element == Self.Iterator.Element

这会导致冲突,因为您的 Self.Iterator.Element元素?。为通用占位符选择不同的名称解决问题。

关于具有可选数组的 Swift 4 自定义通用结构表现奇怪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45148587/

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