gpt4 book ai didi

swift - 无法扩展 Swift 枚举

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:15 25 4
gpt4 key购买 nike

我有以下基本枚举:

enum Voicity {}

在各种不同的文件上,我扩展了上面的枚举来存储我的应用程序用作中心站的各种功能和信息。

例如,我使用此枚举以编程方式创建我的 UI 元素。

extension Voicity {
enum sectionObject {
case textField(ofType: Voicity.UIElement.textField)
case button(ofType: Voicity.UIElement.button)
case label(ofType: Voicity.UIElement.label)
case line()
case photoCircle
case stackView(_: UIStackView)
case view(_: UIView)

var item: UIView {
switch self {
case .textField(let type):
return createTextField(ofType: type)
case .label(let type):
return createLabel(ofType: type)
case .line():
return createLine()
case .photoCircle:
return createPhotoCircle()
case .stackView(let view):
return view
case .view(let view):
return view
case .button(let type):
return createButton(ofType: type)
}
}
}
}

为了可读性/可维护性,我通过再次扩展 sectionObject 将上面返回的函数分离到单独的文件中枚举。

extension Voicity.sectionObject {
func createLabel(ofType type: Voicity.UIElement.label) -> UILabel {
// implementation here
}
}

上面的工作正常但是当我尝试声明 createButton() :

extension Voicity.sectionObject {
func createButton(ofType type: Voicity.UIElement.button) -> UIButton {
// implementation here
}
}

我收到以下错误:

sectionObject is not a member of Voicity .

为什么我不能在一个文件中扩展我的枚举,而我可以在另一个文件中这样做?

更新

createButton()createLabel()方法都在组/文件夹内 Model .

枚举声明在组/文件夹内 Store .

所以,他们是分开的。但令我惊讶的是createLabel()createButton() 时工作不能。

当我的枚举案例再次位于组/文件夹下的单个文件中时,这一切都过去了(方法在不同的文件中)Store和组/文件夹下的方法Model .当它们扩大时,我需要重构我的枚举案例。

此外,我刚刚尝试移动createButton()在扩展声明中 createLabel() .这一切都出于某种原因。

之前,我删除了声明 createButton() 的文件方法并重新创建它,一切都是一样的。因此,这不是一些奇怪的 Xcode 解析问题。

最佳答案

我找到了解决方案 here (nkukushkin 的回答)。

问题

我认为这是一个编译顺序问题,但认为 Xcode 会自动自行处理它。因此,我什至懒得去我的项目设置。事实证明,它可能并不总是如此。

如何解决

  1. 选择您的项目,
  2. 选择您的目标,
  3. 转到目标的构建阶段
  4. 扩展编译源代码

Xcode Project Settings | Target Build Phases | Compile Sources

在这里,您会看到项目中正在编译的文件列表。

在我的例子中,我最初定义我的枚举 sectionObject 的文件列在我扩展该枚举的文件下。因此,我不得不将定义文件移到顶部,以便扩展可以看到它。

不幸的是,Xcode(8.2.1 (8C1002)) 不允许拖放。我不得不删除该文件并通过 Compile Sources 列表下方的加号/减号重新添加它。重新添加后,它会列在顶部。

关于swift - 无法扩展 Swift 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41488147/

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