Никогда не печатать error.localizedDescription
в блоке декодирования catch
. Это возвращает совершенно бессмысленное общее сообщение об ошибке. Всегда печатайте экземпляр error
. Тогда вы получите желаемую информацию.
let decoder = JSONDecoder()
if let data = data {
do {
// process data
} catch {
print(error)
}
Или для полного набора ошибок используйте
let decoder = JSONDecoder()
if let data = data {
do {
// process data
} catch let DecodingError.dataCorrupted(context) {
print(context)
} catch let DecodingError.keyNotFound(key, context) {
print("Key '\(key)' not found:", context.debugDescription)
print("codingPath:", context.codingPath)
} catch let DecodingError.valueNotFound(value, context) {
print("Value '\(value)' not found:", context.debugDescription)
print("codingPath:", context.codingPath)
} catch let DecodingError.typeMismatch(type, context) {
print("Type '\(type)' mismatch:", context.debugDescription)
print("codingPath:", context.codingPath)
} catch {
print("error: ", error)
}
var span = System.TimeSpan.FromMinutes(121);
var hours = ((int)span.TotalHours).ToString();
var minutes = span.Minutes.ToString();
ToString () - то, потому что Вы попросили строковые значения...
TotalHours являются полными часами в TimeSpan, они могут быть больше чем 24 (тогда как поле "Hours" имеет максимум 24),
О, и вообще-то, если задуматься: Почему использование TimeSpan и не вычисляет его самостоятельно? Поскольку TimeSpan уже там отлажен и протестирован Microsoft, он имеет хороший чистый интерфейс (рассмотрение кода, Вы легко видите то, что продолжается, не имея необходимость следовать за вычислением мысленно), и он легко расширяется на дальнейшие решения. (Имейте вход в секундах? Используйте TimeSpan. FromSeconds (). Хотите дни? Используйте промежуток. TotalDays...)
Обновление:
Я просто заметил ошибку в своем ответе: TotalHours возвращает дробное значение всех часов, таким образом, мы должны усечь его к целому числу прежде, чем преобразовать его в строку.
Используйте структуру Промежутка и ее метод Синтаксического анализа.
int value = 121;
TimeSpan timeSpan = TimeSpan.FromMinutes(value);
// gives you the rounded down value of 2
int hours = timeSpan.Hours;
// gives you the minutes left of the hour
int minutes = value - (hours * 60);
int value = 121;
int hours = value / 60;
int minutes = value % 60;
int value = 121;
int hours = value / 60; // 2
int minutes = value % 60; // 1
string strHours = hours.ToString();
string strMinutes = minutes.ToString();