Swift Error:’Sequence’要求类型’T’和’ArraySlice’是等价的

Swift Error:’Sequence’要求类型’T’和’ArraySlice’是等价的,第1张

概述我正在尝试更新数学库以与 Swift 3兼容,但我遇到了一个错误: ‘序列’需要类型’T’和’ArraySlice< T>‘相当于 关于Sequence的Apple文档建议makeIterator()方法返回一个迭代器.似乎迭代器在网格变量中返回一个元素,它是变量T.我不太确定我在这里缺少什么.任何意见将是有益的. public struct Matrix<T> where T: Floating 我正在尝试更新数学库以与 Swift 3兼容,但我遇到了一个错误:

‘序列’需要类型’T’和’ArraySlice< T>‘相当于

关于Sequence的Apple文档建议makeIterator()方法返回一个迭代器.似乎迭代器在网格变量中返回一个元素,它是变量T.我不太确定我在这里缺少什么.任何意见将是有益的.

public struct Matrix<T> where T: floatingPoint,T: ExpressibleByfloatliteral {    public typealias Element = T    let rows: Int    let columns: Int    var grID: [Element]    public init(rows: Int,columns: Int,repeatedValue: Element) {        self.rows = rows        self.columns = columns        self.grID = [Element](repeating: repeatedValue,count: rows * columns)    }... }extension Matrix: Sequence { // <-- getting error here    public func makeIterator() -> AnyIterator<ArraySlice<Element>> {        let endindex = rows * columns        var nextRowStartIndex = 0        return AnyIterator {            if nextRowStartIndex == endindex {                return nil            }            let currentRowStartIndex = nextRowStartIndex            nextRowStartIndex += self.columns            return self.grID[currentRowStartIndex..<nextRowStartIndex]        }    }}
解决方法 您的代码编译为Swift 3.1(Xcode 8.3.3).错误

'Sequence' requires the types 'T' and 'ArraySlice<T>' be equivalent

当编译为Swift 4(Xcode 9,目前为beta)时,会发生这种情况
Sequence协议已经定义了

associatedtype Element where Self.Element == Self.Iterator.Element

这与你的定义有冲突.你可以选择不同的
您的类型别名的名称,或者只是删除它(并使用T代替):

public struct Matrix<T> where T: floatingPoint,T: ExpressibleByfloatliteral {    let rows: Int    let columns: Int    var grID: [T]    public init(rows: Int,repeatedValue: T) {        self.rows = rows        self.columns = columns        self.grID = [T](repeating: repeatedValue,count: rows * columns)    }}extension Matrix: Sequence {    public func makeIterator() -> AnyIterator<ArraySlice<T>> {        let endindex = rows * columns        var nextRowStartIndex = 0        return AnyIterator {            if nextRowStartIndex == endindex {                return nil            }            let currentRowStartIndex = nextRowStartIndex            nextRowStartIndex += self.columns            return self.grID[currentRowStartIndex..<nextRowStartIndex]        }    }}

这与Swift 3和4一起编译和运行.

总结

以上是内存溢出为你收集整理的Swift Error:’Sequence’要求类型’T’和’ArraySlice’是等价的全部内容,希望文章能够帮你解决Swift Error:’Sequence’要求类型’T’和’ArraySlice’是等价的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存