【发布时间】:2016-04-02 11:50:03
【问题描述】:
我在将此快速枚举转换为 Objective-C 时遇到问题:
public enum ISO8601Format: String {
case Year = "yyyy" // 1997
case YearMonth = "yyyy-MM" // 1997-07
case Date = "yyyy-MM-dd" // 1997-07-16
case DateTime = "yyyy-MM-dd'T'HH:mmZ" // 1997-07-16T19:20+01:00
case DateTimeSec = "yyyy-MM-dd'T'HH:mm:ssZ" // 1997-07-16T19:20:30+01:00
case DateTimeMilliSec = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" // 1997-07-16T19:20:30.45+01:00
init(dateString:String) {
switch dateString.characters.count {
case 4:
self = ISO8601Format(rawValue: ISO8601Format.Year.rawValue)!
case 7:
self = ISO8601Format(rawValue: ISO8601Format.YearMonth.rawValue)!
case 10:
self = ISO8601Format(rawValue: ISO8601Format.Date.rawValue)!
case 22:
self = ISO8601Format(rawValue: ISO8601Format.DateTime.rawValue)!
case 25:
self = ISO8601Format(rawValue: ISO8601Format.DateTimeSec.rawValue)!
default:// 28:
self = ISO8601Format(rawValue: ISO8601Format.DateTimeMilliSec.rawValue)!
}
}
}
public enum DateFormat {
case ISO8601(ISO8601Format?), DotNet, RSS, AltRSS, Custom(String)
}
我已经到处研究过,发现了这个和这个:
不太了解这些答案。我正在寻找更优雅的解决方案(如果有的话)或使用现代 Objective-c 语法更好地解释这些答案。
谢谢!
【问题讨论】:
-
我不太明白枚举的目的。这是一个非常奇怪的枚举用法。
-
在我看来,枚举的使用并不奇怪(就像 Apple 展示的 representing a barcode with an enum!)。不会有任何“优雅的解决方案”将其转换为 Objective-C。在 C 中,枚举只是被美化的整数——不像在 Swift 中,它们方式更强大。您必须将枚举包装在额外的逻辑中,以将枚举的整数值转换为字符串,作为您链接到的问题的答案。
-
虽然我很困惑你为什么要这样做
self = ISO8601Format(rawValue: ISO8601Format.Year.rawValue)!.... 为什么不只是self = .Year?
标签: ios objective-c enums nsstring