最近在看一個第三方SDK提供的demo代碼,寫法如下:
那種寫法看著像枚舉,但是確實(shí)不是枚舉,為什么作者要這么寫呢?
當(dāng)時沒有理解,后來終于體會到了
其實(shí),這個是因?yàn)镾DK想使用swift字符串枚舉,但是呢 OC不支持,
想要保留swift的代碼風(fēng)格同時兼容OC,無奈使用這種脫褲子放屁的寫法 ??
同樣道理,例如我想要使用swift 字符串類型枚舉,如果是純swift項(xiàng)目,我們可以這樣寫:
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的風(fēng)格只能寫成這樣
/// 常見數(shù)據(jù)類型的`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 轉(zhuǎn) NSString 防止編譯器警告
@objc func stringValue() -> NSString {
return String(describing:self ) as NSString
}
}