如何将Swift枚举转换成一个Objective-C枚举:NSString? [英] How to convert a Swift enum: String into an Objective-C enum: NSString?
本文介绍了如何将Swift枚举转换成一个Objective-C枚举:NSString?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
公开枚举ISO8601格式: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 = ISO8601格式(rawValue:ISO8601Format.Year.rawValue)!
案例7:
self = ISO8601格式(rawValue:ISO8601Format.YearMonth.rawValue)!
案例10:
self = ISO8601格式(rawValue:ISO8601Format.Date.rawValue)!
案例22:
self = ISO8601格式(rawValue:ISO8601Format.DateTime.rawValue)!
案例25:
self = ISO8601格式(rawValue:ISO8601Format.DateTimeSec.rawValue)!
default:// 28:
self = ISO8601格式(rawValue:ISO8601Format.DateTimeMilliSec.rawValue)!
}
}
}
public enum DateFormat {
case ISO8601(ISO8601Format?),DotNet,RSS,AltRSS,Custom(String)
我已经研究过这个,发现这个和这个:
不太了解这些答案。我正在寻找更加优雅的解决方案(如果有)或更好的解释这些答案与现代客观c语法。 p>
谢谢!
解决方案
NSString * const ISO8601DateFormatType = @ISO8601;
NSString * const DotNetDateFormatType = @DotNet;
NSString * const RSSDateFormatType = @RSS;
NSString * const AltRSSDateFormatType = @AltRSS;
NSString * const CustomDateFormatType = @Custom;
NSString * const ISOFormatYear = @yyyy;
NSString * const ISOFormatYearMonth = @yyyy-MM; // 1997-07
NSString * const ISOFormatDate = @yyyy-MM-dd; // 1997-07-16
NSString * const ISOFormatDateTime = @yyyy-MM-dd'THH:mmZ; // 1997-07-16T19:20 + 01:00
NSString * const ISOFormatDateTimeSec = @yyyy-MM-dd'THH:mm:ssZ; // 1997-07-16T19:20:30 + 01:00
NSString * const ISOFormatDateTimeMilliSec = @yyyy-MM-dd'THH:mm:ss.SSSZ; // 1997-07-16T19:20:30.45 + 01:00
@interface DateFormat:NSObject
+(instancetype)ISODateFormat:(NSString *)isoFormat;
+(instancetype)DotNetDateFormat;
+(instancetype)RSSDateFormat;
+(instancetype)AltRSSDateFormat;
+(instancetype)CustomDateFormat:(NSString *)formatString;
@property(readonly)NSString * dateFormatType;
@property(readonly)NSString * formatDetails;
@end
@implementation DateFormat
- (instancetype)initWithType :( NSString *)formatType详细信息:( NSString *)详细信息{
if(self = [super init]){
_dateFormatType = formatType;
_formatDetails = details;
}
return self;
}
+(instancetype)ISODateFormat:(NSString *)isoFormat
{
return [[DateFormat alloc] initWithType:ISO8601DateFormatType details:isoFormat];
}
+(instancetype)DotNetDateFormat
{
return [[DateFormat alloc] initWithType:DotNetDateFormatType details:nil];
}
+(instancetype)RSSDateFormat
{
return [[DateFormat alloc] initWithType:RSSDateFormatType details:nil];
}
+(instancetype)AltRSSDateFormat
{
return [[DateFormat alloc] initWithType:AltRSSDateFormatType details:nil];
}
+(instancetype)CustomDateFormat:(NSString *)formatString
{
return [[DateFormat alloc] initWithType:CustomDateFormatType details:formatString];
}
@end
I am having an issue converting this swift enum to 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)
}
I already researched this everywhere and found this and this:
Didn't quite understand those answers.I am looking for more elegant solutions (if there are any) or better explanations of those answers with modern objective-c syntax.
Thank you !
解决方案
NSString * const ISO8601DateFormatType = @"ISO8601";
NSString * const DotNetDateFormatType = @"DotNet";
NSString * const RSSDateFormatType = @"RSS";
NSString * const AltRSSDateFormatType = @"AltRSS";
NSString * const CustomDateFormatType = @"Custom";
NSString * const ISOFormatYear = @"yyyy";
NSString * const ISOFormatYearMonth = @"yyyy-MM"; // 1997-07
NSString * const ISOFormatDate = @"yyyy-MM-dd"; // 1997-07-16
NSString * const ISOFormatDateTime = @"yyyy-MM-dd'T'HH:mmZ"; // 1997-07-16T19:20+01:00
NSString * const ISOFormatDateTimeSec = @"yyyy-MM-dd'T'HH:mm:ssZ"; // 1997-07-16T19:20:30+01:00
NSString * const ISOFormatDateTimeMilliSec = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ"; // 1997-07-16T19:20:30.45+01:00
@interface DateFormat : NSObject
+ (instancetype) ISODateFormat: (NSString *) isoFormat;
+ (instancetype) DotNetDateFormat;
+ (instancetype) RSSDateFormat;
+ (instancetype) AltRSSDateFormat;
+ (instancetype) CustomDateFormat: (NSString *) formatString;
@property (readonly) NSString *dateFormatType;
@property (readonly) NSString *formatDetails;
@end
@implementation DateFormat
- (instancetype) initWithType: (NSString *) formatType details: (NSString *) details {
if(self = [super init]) {
_dateFormatType = formatType;
_formatDetails = details;
}
return self;
}
+ (instancetype) ISODateFormat: (NSString *) isoFormat
{
return [[DateFormat alloc] initWithType: ISO8601DateFormatType details: isoFormat];
}
+ (instancetype) DotNetDateFormat
{
return [[DateFormat alloc] initWithType: DotNetDateFormatType details: nil];
}
+ (instancetype) RSSDateFormat
{
return [[DateFormat alloc] initWithType: RSSDateFormatType details: nil];
}
+ (instancetype) AltRSSDateFormat
{
return [[DateFormat alloc] initWithType: AltRSSDateFormatType details: nil];
}
+ (instancetype) CustomDateFormat: (NSString *) formatString
{
return [[DateFormat alloc] initWithType: CustomDateFormatType details: formatString];
}
@end
这篇关于如何将Swift枚举转换成一个Objective-C枚举:NSString?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文