2016-11-30 1 views
0

У меня есть TimeInterval я должен был превратить его в String поэтому он может быть добавлен к Dictionary, который получает передается от компании Apple заставы iPhone через WatchConnectivity.Преобразование TimeInterval Для Струнной <del> строки для интервала времени</del>

Теперь, когда я есть String на iPhone, мне нужно, чтобы превратить его обратно в TimeInterval, но я не могу понять это.

(мне нужно, чтобы отобразить это в UILabel, который показывает продолжительность сеанса тренировки.)

Любые идеи?

Для примера

Watch:

00:15:15 (часы, минуты, секунды) превращается в "+915,012948989868"

let myDouble = computeDurationOfWorkout(withEvents: hkWorkout?.workoutEvents, startDate: hkWorkout?.startDate, endDate: hkWorkout?.endDate) 
    let myDoubleString = String(myDouble) 
    durationVariableString = myDoubleString 

iPhone:

Необходимо включить «915.01294898 9868 "назад в 00:15:15

+0

Как об этом: http://stackoverflow.com/questions/26794703/swift-integer-conversion-to-hours-minutes-seconds – toddg

+0

Ваш вопрос очень запутан. Кажется, у вас уже есть код для преобразования 'TimeInterval' в строку в формате hh: mm: ss. Кажется, у вас уже есть код для преобразования строки обратно в 'TimeInterval' (double). Что именно вы просите о помощи? – rmaddy

+0

@toddg Я проверю эту ссылку, спасибо! – SRMR

ответ

2

Использование calendar.dateComponents вы можете конвертировать 915 в 00:15:15

func stringFromTimeInterval (interval: String) -> String { 
     let endingDate = Date() 
     if let timeInterval = TimeInterval(interval) { 
      let startingDate = endingDate.addingTimeInterval(-timeInterval) 
      let calendar = Calendar.current 

      var componentsNow = calendar.dateComponents([.hour, .minute, .second], from: startingDate, to: endingDate) 
      if let hour = componentsNow.hour, let minute = componentsNow.minute, let seconds = componentsNow.second { 
       return "\(hour):\(minute):\(seconds)" 
      } else { 
       return "00:00:00" 
      } 

     } else { 
      return "00:00:00" 
     } 
    } 
+0

Спасибо за ответ! Это не совсем точная подгонка, потому что мне нужно передать «String» в качестве аргумента, а не «TimeInterval» в качестве аргумента. И тогда мне нужно вернуть 'TimeInterval', а не возвращать' String'. Есть предположения? – SRMR

+0

Вам нужна функция, в которой вы проходите 00:15:15, и она вернет 915? – Rajat

+0

Функция, в которой я передаю «String» 915.012948989868 ", и верните' TimeInterval' "00:15:15". Как 'func timeIntervalFromString (строка: String) -> TimeInterval' или что-то в этом роде – SRMR

1

Вместо того, чтобы превращать временной интервал в строку, вместо этого превратите его в NSNumber, который можно добавить в словарь. NSTimeInterval - это просто двойник, так что вы можете легко и просто сбрасывать его с двойки.

let timeInterval: TimeInterval = 915.012948989868 

let dict = ["TimeIneterval": NSNumber(value: timeInterval)] 

if let extractedTimeInterval: TimeInterval = dict["TimeIneterval"] as? TimeInterval { 

    print(extractedTimeInterval) 
} 
+0

Спасибо за ответ! Я попробую. Как только я передаю «NSNumber» через словарь на iPhone, как только я получу «NSNumber» на iPhone, мне просто нужно будет его вернуть обратно в «TimeInterval»? – SRMR

Смежные вопросы