2016-11-01 4 views
1

Я пытаюсь объединить два целочисленных значения (текущий час и текущую минуту). Например:Объединить два int в swift

int1: 18 
int2: 2 

Тогда я хочу, чтобы они были один INT: 182. я получаю текущий час и текущую минуту с этим кодом:

// get the current date and time 
    let currentDateTime = Date() 

    // get the user's calendar 
    let userCalendar = Calendar.current 

    // choose which date and time components are needed 
    let requestedComponents: Set<Calendar.Component> = [ 
     .year, 
     .month, 
     .day, 
     .hour, 
     .minute, 
     .second 
    ] 

    // get the components 
    let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime) 

    // now the components are available 
    let dtHour = dateTimeComponents.hour 
    let dtMinute = dateTimeComponents.minute 

Тогда я думал, что я мог бы Concat эти два целых числа, когда я преобразовал их в строку и чем обратно междунар так, что у меня есть большое значение INT , Я сделал это со следующими строками:

let strHour = String(describing: dtHour) 
    let strMinute = String(describing: dtMinute) 

    var currenttime : String = strHour 
    currenttime += strMinute 

    //reconvert to int 
    let ct: Int? = Int(currenttime) 

    print("currentTime as Int : ", ct) 
    print("currenttime as String: ", currenttime) 

Выход первого отпечатка:

CURRENTTIME в Int: ноль

И выход второго отпечатка:

CurrentTime как строка: Необязательно (18) Дополнительное (2)

Да, я знаю, что мне нужно исправить проблему с помощью минут, если текущая минута меньше десяти, и мне сначала нужно вставить нуль, но я не понимаю, почему я не могу преобразовать строку обратно в int, так что это большая строка.

Итак, есть ли правильный способ объединить два целых числа, а затем переконвертировать их обратно к одному большому значению int?

+0

Все свойства 'DateComponents' являются * optionals, * сравните http://stackoverflow.com/questions/40362516/option-value-are -на-получение назначенного к ан-переменной правильно. –

+4

Примечание: Использование 'String (description:)' часто является неправильным решением. Это заставляет ваш код компилироваться, но результат не тот, который вы действительно хотите. –

+1

И, конечно, вам не нужно преобразовывать строки: 'let ct = dateTimeComponents.hour! * 100 + dateTimeComponents.minute! ' –

ответ

0

Код ниже принтами:

CURRENTTIME в Int: 2249

CURRENTTIME в качестве строки: 2249

// get the current date and time 
    let currentDateTime = Date() 

    // get the user's calendar 
    let userCalendar = Calendar.current 

    // choose which date and time components are needed 
    let requestedComponents: Set<Calendar.Component> = [ 
     .year, 
     .month, 
     .day, 
     .hour, 
     .minute, 
     .second 
    ] 

    // get the components 
    let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime) 

    // now the components are available 
    let dtHour = dateTimeComponents.hour 
    let dtMinute = dateTimeComponents.minute 

    let strHour = String(dtHour!.description) 
    let strMinute = String(dtMinute!.description) 

    var currenttime : String = strHour! 
    currenttime += strMinute! 

    //reconvert to int 
    let ct = Int(currenttime) 

    print("currentTime as Int : ", ct!) 
    print("currenttime as String: ", currenttime) 
+0

Большое спасибо, это работает отлично! Я просто добавил код для вставки нуля, если минута <10 – Fabian

-1

Как указывалось другими, это ОЧЕНЬ плохой способ справиться со временем, и вы должны переоценить то, что вы пытаетесь сделать, и найти лучшее решение.

Но вот ответ на актуальный вопрос

let hour: Int? = 23 
let minute: Int? = 11 

if let hour = hour, let minute = minute { 
    let timeString = "\(hour)\(minute)" 
    let timeInt: Int? = Int(timeString) 
} 
+2

Вы пропустили суть вопроса. OP не имеет двух простых значений «Int». OP получает значения 'hour' и' minute' от 'DateComponents', что приводит к двум значениям' Int? '. И нет смысла конвертировать в строку и обратно в 'Int', чтобы объединить два числа. – rmaddy