Objective-Cの.hash
はSwiftの.hashValue
に相当しますか?Objective-Cの.hashはSwiftの.hashValueと同じですか?
もしそうでない場合、Objective-Cには.hashValue
と同等のものはありますか?これは私がここに持っている問題に関し、
は(私は運動としてのObjective-Cにスウィフトライブラリを変換しています):NSString *hashKey = [NSString stringWithFormat:@"%@%@%@%@%@", dateStyle.hash, timeStyle.hash, doesRelativeDateFormatting.hash, timeZone.hash, locale.hash];
加盟基準基地タイプ:
+ (NSDateFormatter *) formatter : (NSDateFormatterStyle *) dateStyle : (NSDateFormatterStyle *) timeStyle : (BOOL) doesRelativeDateFormatting : (NSTimeZone *) timeZone : (NSLocale *) locale {
timeZone = [NSTimeZone localTimeZone];
locale = [NSLocale currentLocale];
NSString *hashKey = [NSString stringWithFormat:@"%@%@%@%@%@", dateStyle.hash, timeStyle.hash, doesRelativeDateFormatting.hash, timeZone.hash, locale.hash];
NSMutableDictionary *formatters = [NSDate sharedDateFormatters];
NSDateFormatter *cachedDateFormatter = formatters[hashKey];
if (cachedDateFormatter != nil) {
return cachedDateFormatter;
}
else {
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
formatter.dateStyle = *(dateStyle);
formatter.timeStyle = *(timeStyle);
formatter.doesRelativeDateFormatting = doesRelativeDateFormatting;
formatter.timeZone = timeZone;
formatter.locale = locale;
formatters[hashKey] = formatter;
return formatter;
}
}
は、この行に私を指示します"NSDateFormatterStyle "(別名 "列挙型NSDateFormatterStyle")構造体または共用体ではありません
オリジナルスウィフトコード:
private class func formatter(dateStyle dateStyle: NSDateFormatterStyle, timeStyle: NSDateFormatterStyle, doesRelativeDateFormatting: Bool, timeZone: NSTimeZone = NSTimeZone.localTimeZone(), locale: NSLocale = NSLocale.currentLocale()) -> NSDateFormatter {
var formatters = NSDate.sharedDateFormatters()
let hashKey = "\(dateStyle.hashValue)\(timeStyle.hashValue)\(doesRelativeDateFormatting.hashValue)\(timeZone.hashValue)\(locale.hashValue)"
if let cachedDateFormatter = formatters[hashKey] {
return cachedDateFormatter
} else {
let formatter = NSDateFormatter()
formatter.dateStyle = dateStyle
formatter.timeStyle = timeStyle
formatter.doesRelativeDateFormatting = doesRelativeDateFormatting
formatter.timeZone = timeZone
formatter.locale = locale
formatters[hashKey] = formatter
return formatter
}
}
'hash'は' NSObject'に由来します。プリミティブ型に対して 'hash'を呼び出すことはできません。 – rmaddy
そして 'NSDateFormatterStyle'は列挙型です。ポインタとして渡すべきではありません。 – rmaddy
ハッシュは一意ではありません。ハッシュ値に基づいて一意のキーを作成する必要があるようです。それは適切ではありません。 – rmaddy