我有以下基础枚举:
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解析问题。
答案 0 :(得分:1)