2017-12-08 10 views
1

NSTimeInterval(またはDouble)からDispatchTimeIntervalを差し引く必要があります。DispatchTimeIntervalをNSTimeInterval(またはDouble)に変換するにはどうすればよいですか?

DispatchTimeIntervalNSTimeIntervalに変換する標準的な方法はありますか?

+0

に拡張を作成DispatchTimeIntervalはDispatchTimeと、ない(NS)日または(NS)の時間間隔で使用されています。あなたはなぜこれが必要なのかをもっと教えてくれますか? - いずれの場合でも、DispatchTimeIntervalは列挙型であり、Doubleに変換するのは簡単なスイッチ/ケースの問題です。 –

+0

@MartinR 'DispatchTimeInterval'で設定されたタイマーがあり、' NSTimeInterval'で実経過時間を計測しています。私は遅れを取るために両方を引く必要があります。 –

答えて

2

DispatchTimeIntervalは列挙型です:

public enum DispatchTimeInterval : Equatable { 
    case seconds(Int) 
    case milliseconds(Int) 
    case microseconds(Int) 
    case nanoseconds(Int) 
    case never 
} 

あなたが使用してDispatchTimeIntervalを初期化することができます。

let tenSeconds: DispatchTimeInterval = .seconds(10) 
    let tenNanoseconds: DispatchTimeInterval = .nanoseconds(10) 

をあなたが列挙

if case .seconds(let value) = tenSeconds { 
     print("DispatchTimeInterval is seconds \(value)") 
    } else if case .nanoseconds(let value) = tenNanoseconds { 
     print("DispatchTimeInterval is seconds \(value)") 
    } 
場合の値で値を一致させる必要が列挙型から値を取得するには

変換機能は次のように表示されることがあります:

func toDouble(_ interval: DispatchTimeInterval) -> Double? { 
     var result: Double? = 0 

     switch interval { 
     case .seconds(let value): 
      result = Double(value) 
     case .milliseconds(let value): 
      result = Double(value)*0.001 
     case .microseconds(let value): 
      result = Double(value)*0.000001 
     case .nanoseconds(let value): 
      result = Double(value)*0.000000001 

     case .never: 
      result = nil 
     } 

     return result 
    } 

More about Enumeration see in Apple Documentation

UPDATE:

DispatchTimeInterval

extension DispatchTimeInterval { 
    func toDouble() -> Double? { 
     var result: Double? = 0 

     switch self { 
     case .seconds(let value): 
      result = Double(value) 
     case .milliseconds(let value): 
      result = Double(value)*0.001 
     case .microseconds(let value): 
      result = Double(value)*0.000001 
     case .nanoseconds(let value): 
      result = Double(value)*0.000000001 

     case .never: 
      result = nil 
     } 

     return result 
    } 
} 
関連する問題