gpt4 book ai didi

ios - Xcode 只能看到写在单独文件中的嵌套类的一些类似扩展

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:57 27 4
gpt4 key购买 nike

我试图通过尽可能缩短方法和文件并使用嵌套类进行命名空间来使我的代码尽可能地可读。它工作正常,除了一些非常奇怪的时刻。

我有一些用于命名空间的类。

class Space { }

其中使用的所有类都作为扩展在它们自己的文件中实现。

extension Space {
class SomeClass {
// implementation
}
}

其中一个 SomeClasses 有许多非常复杂的初始化器,所以我也将它们拆分到它们自己的文件中并按如下方式实现:

extension Space.SomeClass {
convenience init(fromSomeSource source: SourceClass) {
self.init()
// other implementation
}
}

问题是其中一些文件工作得很好,但其中一些文件抛出 'SomeClass' is not a member type of 'Space' 并且我不知道为什么。

它们都非常相似。唯一的区别是初始化器本身的实现。所有文件都保存在同一个地方,我不知道为什么有些文件可以正常工作,有些则不能。

我试图将代码从不工作的文件移动到工作正常并且工作正常的文件中——Xcode 同意查看代码并且没有反对它。但是当完全相同的代码位于它自己的文件中时——Xcode 或编译器不想理解 SomeClass 实际上是 Space 的成员。

我尝试清理构建,包括手动转储 ~/Library/Developer/Xcode/DerivedData 文件夹。没有任何帮助。

当然,我可以将它们全部放在一个文件中并且它会正常工作,但是为什么它对我来说如此挑剔呢?


我试图创建一个新文件并将其中一个坏文件的所有内容移到那里。它有效,但仅适用于某些文件名。有些名称再次给出相同的错误,但似乎如果名称是全新的并且与任何现有名称都不相似 - 它可以工作。魔法?

最佳答案

我遇到过类似的问题,似乎编译器正在尝试处理您在定义嵌套类之前扩展嵌套类的文件。因此,您会收到此错误消息,指出 Space 没有成员 SomeClass

我找到的解决方案是转到您的目标设置,打开 Build Phases

enter image description here

在那里,在 Compile Sources 部分中,您应该将文件放在定义嵌套类的上方文件中。


这个解决方案似乎甚至可以很好地满足您的观察,即当您重新创建文件时,它有时会编译,因为当您重新创建文件时,它在 Compile Sources 中的位置会发生变化。

关于ios - Xcode 只能看到写在单独文件中的嵌套类的一些类似扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34376101/

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