gpt4 book ai didi

swift - Swift 协议(protocol)继承 Sliceable 并添加单个属性时出现奇怪的编译器错误

转载 作者:行者123 更新时间:2023-11-30 10:19:02 24 4
gpt4 key购买 nike

考虑以下代码:

protocol CollectionStreamType: Sliceable {
var position: Index { get set }
}

class Cell<T> {
let contents: T
init(_ contents: T) {
self.contents = contents
}
}

enum ParseResult<T, E> {
case Matched([T])
case NotMatched
case Err(Cell<E>)
}

func then<S: CollectionStreamType, T, E where S.SubSlice == S>(parsers: [S -> ParseResult<T, E>])(stream: S) -> ParseResult<T, E> {
let position = stream.position
// ERROR IS HERE: Type '()' does not conform to protocol 'GeneratorType'. WTH?
stream.position = position
return .NotMatched
}

我正在为 Swift 编写一个名为 Parsimonious 的解析器组合器库。它运行良好,但我最近决定用协议(protocol) CollectionStreamType 替换我的具体集合类型。当我这样做时,我开始遇到问题。

这段代码不是直接来 self 的解析器组合器库,但它将问题提炼到本质,并确实导致了我看到的错误,如下所示:

Type '()' does not conform to protocol 'GeneratorType'.

我很困惑。有人知道如何解决这个问题吗?

最佳答案

这不是最有帮助的编译器错误,但我认为这是因为 stream 不可变,因此您无法访问其 setter 。如果您将 stream inoutvar 设置为 stream,或者将 CollectionStreamType 设置为仅类,则会进行编译。

关于swift - Swift 协议(protocol)继承 Sliceable 并添加单个属性时出现奇怪的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330043/

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