Swift5如何定义无需调用.rawValue即可直接返回String的枚举
你当前的代码问题在于:你定义的Attach是基于String的枚举类型,Attach.pdf本身是Attach枚举的实例,而addAttachmentData方法的mimeType参数要求传入String类型,二者类型不匹配,因此无法直接传入使用。你重写的init?(rawValue: String)是用于从字符串反向生成枚举实例的,和当前需求无关。
以下是两种可直接实现你需求的方案:
方案1:加方法重载(无需修改现有枚举定义)
给你调用addAttachmentData方法的类新增扩展,重载一个接受Attach类型参数的方法,内部自动处理rawValue的读取:
// 替换成实际对应类的名称,比如是UIActivityViewController就填这个 extension 目标类名 { func addAttachmentData(_ data: Data, mimeType: Attach, fileName: String) { self.addAttachmentData(data, mimeType: mimeType.rawValue, fileName: fileName) } }
添加扩展后你预期的调用写法就可以直接正常运行。
方案2:改写枚举为常量命名空间(最简便,无需.rawValue)
如果不需要枚举的其他特性,只是用来统一管理MIME类型常量,可以直接把枚举改成静态常量集合,所有值直接是String类型:
enum Attach { static let jpg = "image/jpeg" static let png = "image/png" static let doc = "application/msword" static let ppt = "application/vnd.ms-powerpoint" static let html = "text/html" static let pdf = "application/pdf" }
这种写法下Attach.pdf本身就是String类型,可以直接传入mimeType参数,完全不需要额外处理。
内容的提问来源于stack exchange,提问作者HirsuteJim
相关产品推荐
相关产品推荐

