2016-04-14 12 views
0

どのように.minute()と.hour()をObjective-Cに変換しますか?.hour()と.minute()をSwiftからObjective-Cに変換するには?

func nearestHour() -> Int { 
    let halfHour = NSDate.minuteInSeconds() * 30 
    var interval = self.timeIntervalSinceReferenceDate 
    if self.seconds() < 30 { 
     interval -= halfHour 
    } else { 
     interval += halfHour 
    } 
    let date = NSDate(timeIntervalSinceReferenceDate: interval) 
    return date.hour() 
} 

私はこれを試してみました:

- (int) nearestHour { 
NSInteger halfHour = [NSDate minuteInSeconds].intValue * 30; 
NSTimeInterval interval = [self timeIntervalSinceReferenceDate]; 
if ([self seconds] < 30) { 
    interval -= halfHour; 
} 
else { 
    interval += halfHour; 
} 
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: interval]; 
return [date hour]; 
} 

私はこれらの行に次のエラーを取得:NSDateには目に見える@interfaceはセレクタ秒を宣言していない

if ([self seconds] < 30) { 

を。

return [date hour]; 

NSDateの表示されない@interfaceは、セレクタ時を宣言します。

+0

'NSDate'ためのドキュメントを見てください。 'seconds'や' hour'といったメソッドはありません。 Swiftコードのカスタム関数でなければなりません。 – rmaddy

+0

[こちらのリンクを参照してください](http://stackoverflow.com/questions/743140/how-do-i-get-the-current-hour-using-cocoa)これはあなたのコンバージョンに明確な方法を示しています[Referこのリンクも参照してください。[1] [1]:http://stackoverflow.com/questions/1739383/convert-seconds-integer-to-hhmm-iphone –

+0

私は実際にすでにそのリンクを見ていました。迅速なコードにはhour()やseconds()という名前のカスタム関数がないことがわかっているので、私は驚いた。それが私の質問に答えたいのです。 –

答えて

0

NSDateには必要なインターフェイスがありません。あなたはそれをカレンダーインターフェースに分割する必要があります。その後、時/分/秒などを個別に設定したり、必要な作業を行うことができます。ご例えば

NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self]; 

if ([components seconds] < 30) { 

:SOとGoogle上の例の

- (int) nearestHour { 
    NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self]; 
    NSInteger halfHour = [NSDate minuteInSeconds].intValue * 30; 
    NSTimeInterval interval = [self timeIntervalSinceReferenceDate]; 
    if ([components minutes] < 30) { 
     interval -= halfHour; 
    } 
    else { 
     interval += halfHour; 
    } 
    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: interval]; 
    return [date hour]; 
} 

ロット:How do I get the current hour using Cocoa?

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html#//apple%5Fref/doc/uid/10000039

+0

新しいバージョン(swift)が古いバージョン(xcode/objective c)よりも使いやすい理由についての説明?彼らは物事を改善した。 – LawfulEvil

0

ので、例えば、日光AppleはNSCalendarで常に最新の数学を行うことをお勧めします時間の節約は、秒を加算/減算することによって計算されるいくつかの日付は存在しない可能性があります。

nextDateAfterDateは、指定された日付コンポーネント(この場合は分数がゼロの次の日付)に応じて次の日付を計算します。過去に最も近い時間を取得するには、逆方向に検索することもできます。

スウィフト

let now = NSDate() 
let calendar = NSCalendar.currentCalendar() 
let roundDown = calendar.component(.Minute, fromDate: now) < 30 
let components = NSDateComponents() 
components.minute = 0 
let options : NSCalendarOptions = roundDown ? [.MatchNextTime, .SearchBackwards] : .MatchNextTime 
let nearestDate = calendar.nextDateAfterDate(now, matchingComponents: components, options: options)! 
let nearestHour = calendar.component(.Hour, fromDate: nearestDate) 

のObjective-C

NSDate *now = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
BOOL roundDown = [calendar component:NSCalendarUnitMinute fromDate: now] < 30 ; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
components.minute = 0; 
NSCalendarOptions options = roundDown ? (NSCalendarMatchNextTime | NSCalendarSearchBackwards) : NSCalendarMatchNextTime; 
NSDate *nearestDate = [calendar nextDateAfterDate:now matchingComponents: components options: options]; 
NSInteger nearestHour = [calendar component:NSCalendarUnitHour fromDate: nearestDate]; 
関連する問題