s***@163.com
s***@163.com
  • 发布:2026-01-21 11:18
  • 更新:2026-01-23 15:37
  • 阅读:66

UTS枚举编译到Swift出现问题

分类:uni-app x

这是我UTS的枚举

export enum UniAmapType{  
    MAP_TYPE_NORMAL = 1,  
    MAP_TYPE_SATELLITE = 2,  
    MAP_TYPE_NIGHT = 3,  
    MAP_TYPE_NAVI = 4,  
    MAP_TYPE_BUS = 5,  
    MAP_TYPE_NAVI_NIGHT = 6  
}

他在运行到IOS时候出现问题
method cannot be declared public because its parameter uses an internal type‌,
编译后到结果是

enum UniAmapType {  
    case MAP_TYPE_NORMAL = 1  
    case MAP_TYPE_SATELLITE = 2  
    case MAP_TYPE_NIGHT = 3  
    case MAP_TYPE_NAVI = 4  
    case MAP_TYPE_BUS = 5  
    case MAP_TYPE_NAVI_NIGHT = 6  
}

请问要怎么改呢

HBuilderX 版本:4.87
平台:uniappx

2026-01-21 11:18 负责人:DCloud_App_Array 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

目前uts还没有支持枚举(enum)类型,此功能还在开发中。
建议暂时避免使用枚举类型,先使用常量替换。等待后续发布了支持枚举的版本后再使用。
如果只是在iOS平台使用,也可以考虑使用混编,用swift中的枚举类型。

Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

报错信息
method cannot be declared public because its parameter uses an internal type
说明 Swift 编译器发现某个 public 的方法/函数用到了“对外不可见”的类型,而这个类型正是 UTS 枚举编译后生成的枚举类型。
UTS 会把枚举编译成 Swift enum,但默认不会给它加 public 访问级别,于是任何在插件接口(public 方法)里用到该枚举的地方都会触发上述错误。

解决思路:把枚举显式声明为 public,或者把用到该枚举的接口改成 internal / private。
在 UTS 里最简单、最安全的做法是给枚举加 export 并写成 UTS 推荐的“整型枚举”写法,编译器会自动在 Swift 侧生成 public enum

修改后的 UTS 代码:

// uni_modules/your-plugin/index.uts  
@objc public enum UniAmapType: Int {  
  case MAP_TYPE_NORMAL = 1  
  case MAP_TYPE_SATELLITE = 2  
  case MAP_TYPE_NIGHT = 3  
  case MAP_TYPE_NAVI = 4  
  case MAP_TYPE_BUS = 5  
  case MAP_TYPE_NAVI_NIGHT = 6  
}

要点

  1. @objc public 并继承 Int,UTS 会原样保留到 Swift,且为 public
  2. 如果枚举仅在插件内部使用,也可以保持默认(不加 public),但所有引用它的函数/属性就不能再声明为 public,需要改为 internalfileprivate,否则只能把枚举公开。
  3. 不建议手动改生成的 Swift 文件,下次重新编译会被覆盖。

重新云打包或自定义基座即可通过 iOS 编译。

内容为 AI 生成,仅供参考

要回复问题请先登录注册