美文网首页
swift 对象类型的枚举兼容OC

swift 对象类型的枚举兼容OC

作者: YannChee | 来源:发表于2022-12-18 19:03 被阅读0次

最近在看一个第三方SDK提供的demo代码,写法如下:

那种写法看着像枚举,但是确实不是枚举,为什么作者要这么写呢?
当时没有理解,后来终于体会到了

其实,这个是因为SDK想使用swift字符串枚举,但是呢 OC不支持,
想要保留swift的代码风格同时兼容OC,无奈使用这种脱裤子放屁的写法 😂

同样道理,例如我想要使用swift 字符串类型枚举,如果是纯swift项目,我们可以这样写:

enum QYDataMimeType: String {
    case JPEG = "image/jpeg"
    case PNG = "image/png"
    case GIF = "image/gif"
    case HEIC = "image/heic"
    case HEIF = "image/heif"
    case WEBP = "image/webp"
    case TIF = "image/tif"
    case JSON = "application/json"
}

但是为了同时兼容Objective-C ,但又想保留swift的风格只能写成这样

/// 常见数据类型的`MIME Type
@objc
final class QYDataMimeType: NSObject {
    typealias QYDataMimeType =  NSString
    
    @objc static let JPEG: QYDataMimeType = "image/jpeg"
    @objc static let PNG: QYDataMimeType = "image/png"
    @objc static let GIF: QYDataMimeType = "image/gif"
    @objc static let HEIC: QYDataMimeType = "image/heic"
    @objc static let HEIF: QYDataMimeType = "image/heif"
    @objc static let WEBP: QYDataMimeType = "image/webp"
    @objc static let TIF:  QYDataMimeType = "image/tif"
    @objc static let JSON: QYDataMimeType = "application/json"
    
    // 某些地方需要传入字符串,QYDataMimeType 转 NSString 防止编译器警告
    @objc func stringValue() -> NSString {
        return String(describing:self ) as NSString
    }
    
}

相关文章

  • swift 对象类型的枚举兼容OC

    最近在看一个第三方SDK提供的demo代码,写法如下: 那种写法看着像枚举,但是确实不是枚举,为什么作者要这么写呢...

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • swift学习之枚举

    相比OC的枚举类型,swift的枚举类型就方便的多,OC的枚举类型成员属性只能是整数NSInterger(C语言的...

  • Swift-07:枚举enum

    这里先介绍一下swift枚举与oc枚举的区别 OC: 枚举只能为Int类型swift : 可以在枚举中定义方法 可...

  • 在学习swift的一些笔记(七)

    OC与Swift中的枚举 OC的枚举NS_ENUM NS_ENUM : 递增枚举, 每个枚举类型即便不是每个都赋值...

  • Swift基础语法-枚举,枚举原始值,枚举相关值,switch提

    1. Swift枚举基本概念 Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像...

  • 从零学习Swift 02:枚举和可选项

    一:枚举 枚举的定义Swift中的枚举定义枚举类型很简单: 同 OC不同的是,Swift中的枚举不单单可以是Int...

  • Swift 枚举,结构体,类

    枚举(enum) 枚举的成员类型 相对于OC的枚举来说.Swift中的枚举功能要更加强大 OC中枚举值只能是int...

  • swift3.0- 枚举

    Swift枚举 Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样...

  • 枚举

    Swift枚举:Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样...

网友评论

      本文标题:swift 对象类型的枚举兼容OC

      本文链接:https://www.haomeiwen.com/subject/pqrsqdtx.html