gpt4 book ai didi

swift - 将 Swift 结构定义移动到不同的文件会导致构建失败

转载 作者:行者123 更新时间:2023-12-05 06:22:55 24 4
gpt4 key购买 nike

我正在实现一个使用结构和通用协议(protocol)的解析器来减少样板文件,但我遇到了一个非常微妙的错误,与我如何组织源代码有关!

我想像这样解析一些基本类型

// some inner type
struct Foo {
let x: Int
}

内部类型可以包含在各种容器中,但我希望所有容器都能够给我一个内部类型数组:

// some containers contain an array
protocol MultiContainer {
associatedtype Inner // XXX
var objects: [Inner] { get }
}

// some containers contain a single object, which is a special case
protocol SingleContainer: MultiContainer { // XXX
associatedtype Inner
var object: Inner { get }
}

// this makes the single container conform
extension SingleContainer {
var objects: [Inner] { return [object] }
}

那么具体的容器类型是这样的:

struct SingleFooContainer: SingleContainer {
let object: Foo
}

func test() {
SingleFooContainer(object: Foo(x: 0)).objects
}

如果我将所有这些都放在一个 Swift 文件中,所有这些都可以完美运行!

但是 如果我将 SingleFooContainer 移动到不同的源文件(与其他文件相同的目录/目标),它无法构建(在 Xcode 10 和 11.2 中) .请注意,您必须在包含协议(protocol)定义的文件中保留 test 函数。

它说

Type 'SingleFooContainer' does not conform to protocol 'MultiContainer'

Type 'SingleFooContainer' does not conform to protocol 'SingleContainer'

如果我有它,它会插入协议(protocol) stub ,它会添加

typealias Inner = <#type#>

这就像 Swift 无法弄清楚的两个文件之间存在循环依赖关系。这是关于我遗漏的通用扩展的一些陷阱吗?

最佳答案

这是 Swift 编译器中的错误:https://bugs.swift.org/browse/SR-11806

在 Xcode 中安装最新的 trunk Swift 工具链修复了构建错误。

关于swift - 将 Swift 结构定义移动到不同的文件会导致构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868217/

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