You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何在静态函数中访问其他文件的枚举类型?

解决Swift中「Use of undeclared type 'MyEnum'」的问题

嘿,我来帮你搞定这个编译错误!你现在遇到的问题是在A.swift里访问B.swift的MyEnum时,编译器找不到这个类型,下面分几种常见场景给你解决方案:

场景1:两个文件在同一个项目Target里

如果A.swift和B.swift属于同一个App或者同一个Framework Target,那问题大概率出在这几个小地方:

  • 先确认B.swift的Target Membership:打开Xcode,选中B.swift,看右侧的File Inspector,确保你当前编译的Target已经被勾选了——有时候不小心把文件排除出编译列表就会出现这种错误。
  • 访问权限没问题:你已经给MyEnum加了public修饰符,同一个模块内其实用默认的internal就够,但public也完全不影响访问,所以这个不是问题。
  • 直接使用就行:只要上面的条件满足,你可以直接在getUrl()里写MyEnum.oneDay,比如:
struct ApiRequest {
    static func getUrl() {
        let selectedDay = MyEnum.oneDay
        // 后续用selectedDay做逻辑处理就行
    }
}

场景2:两个文件在不同的Target/模块里

比如MyEnum在一个独立的Framework里,而A.swift在主App Target里,那你需要两步操作:

  1. 添加依赖:在Xcode的Project设置里,找到A.swift所在的Target,切换到General标签,在Frameworks, Libraries, and Embedded Content里添加包含MyEnum的那个Framework。
  2. 导入模块:在A.swift的最顶部导入这个Framework的模块名,然后就能正常访问了:
import YourFrameworkName // 替换成你的Framework名字

struct ApiRequest {
    static func getUrl() {
        let selectedDay = MyEnum.oneDay
    }
}

额外排查点

如果上面的方法都没用,你可以检查下MyEnum是不是嵌套在其他类型里(比如某个类或者结构体内部)——如果是这种情况,你需要用外部类型.MyEnum.oneDay的格式来访问,但从你给出的代码看,MyEnum是顶级枚举,所以这个情况应该不适用。

内容的提问来源于stack exchange,提问作者c0dehunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:34