注:練習として、SwiftコードをObjective-Cに変換しています。SwiftからObjective-Cに関連する値を持つパラメータ化されたenum/enumを変換するにはどうすればよいですか?
CODE:私は変換元オリジナルスウィフトコード:私が試しWHAT
case .ISO8601(let isoFormat):
let dateFormat = (isoFormat != nil) ? isoFormat! : ISO8601Format(dateString: string as String)
let formatter = NSDate.formatter(format: dateFormat.rawValue)
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone.localTimeZone()
formatter.dateFormat = dateFormat.rawValue
if let date = formatter.dateFromString(string as String) {
self.init(timeInterval:0, sinceDate:date)
} else {
self.init()
}
は: Objective-Cの変換は、私が試し:
else if([format.dateFormatType compare: ISO8601DateFormatType] == NSOrderedSame) {
NSString *isoFormat = // WHAT DO TO HERE ?;
NSString *dateFormat = (isoFormat != nil) ? isoFormat : ISO8601DateFormatType;
NSDateFormatter *formatter = [NSDate formatterWithFormat: dateFormat andTimeZone: [NSTimeZone localTimeZone ] andLocale: [NSLocale currentLocale]];
formatter.locale = [NSLocale localeWithLocaleIdentifier: (@"en_US_POSIX")];
NSLog([NSString stringWithFormat:@"%@", dateFormat]);
// dateFormat = ISO8601
NSDate *date = [formatter dateFromString:(string)];
//
// ISSUE IS HERRRREEEE^
//
NSLog([NSString stringWithFormat:@"%@", date]);
// date = nil
if (date != nil){
return [self initWithTimeInterval: 0 sinceDate: date];
}
else {
return [self init];
}
}
私が取ったアプローチは、別のclを使用することでした
DateFormat.m
#import "DateFormat.h"
@implementation DateFormat
NSString * const ISO8601DateFormatType = @"ISO8601";
NSString * const DotNetDateFormatType = @"DotNet";
NSString * const RSSDateFormatType = @"EEE, d MMM yyyy HH:mm:ss ZZZ";
NSString * const AltRSSDateFormatType = @"d MMM yyyy HH:mm:ss ZZZ";
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
- (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
MY ISSUE:関連する値(これは、関連する値を持つもともと大迅速列挙した)との迅速な列挙型の動作を再現するためにお尻
私のコードでは、dateFromString
は、パラメータとして渡されたフォーマットが正しくないため、nil
を返します。その理由は、列挙型を関連する値行で変換したためです。case .ISO8601(let isoFormat):
case .ISO8601(let isoFormat):
をObjective-Cに変換する方法がわかりません。
関連する値を持つ列挙型はObjective-CではなくSwiftにのみ存在するという問題があります。
Objective-Cでは関連する値の大文字小文字の.ISO8601(let isoFormat):
を使用してその列挙型をどのように変換できますか?
SOLUTION:
EDIT:答えは簡単だった、私はちょうど書かなければならなかった:私は質問の冒頭で示したObjective-Cの変換でNSString *isoFormat = format.formatDetails;
。 (理解することが私のクラスDateFormatの実装ファイルを確認してください)
はhttp://stackoverflow.com/questions/36753954/のコピー本ではないですdescription-label-doesnt-appear-in-my-tableviewcontroller-cells? [最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve) – Sulthan
を書くまで、私たちはあなたを助けることはできません。それがJALによって答えられました! –
これは別の問題です。しかし、DateFormatクラスはどこでも使用されているので、何らかのコードが再び表示されます。 –