следующие работы в Playground:Проблема преобразования строки в Int
func stringToInt(numberStr: String!) -> Int {
print(numberStr)
return Int(numberStr)!
}
let strNum1: String?
strNum1 = "1"
let result = stringToInt(numberStr: strNum1)
Она возвращает 1, как и ожидалось.
В Xcode, подобный подход не:
func stringToInt(numberStr: String!) -> Int {
print("\(numberStr!)")
let str = "\(numberStr!)"
print(Int(str))
return Int(str)!
}
Первая печать производит: Дополнительно (1) Вторая печать производит: ноль Ответный утверждение терпит неудачу, потому что он пытается создать Int из ноль.
Это должно быть что-то простое, но я не смог определить, почему он не работает. Это в Swift 3 и Xcode 8 BTW.
@Hamish:
В Xcode, у меня есть строка с числовым значением. Это:
печать ("номер: (selectedAlertNumber) - единица измерение: (selectedAlertUnit)")
... производит это:
номер: факультативная (1) - единица: День
Затем я проверяю, чтобы увидеть, если либо selectedAlertNumber из selecterAlertUnit =! «-»
if selectedAlertNumber != "-" && selectedAlertUnit != "-" {
// set alert text
var unitStr = selectedAlertUnit
let alertNumber = stringToInt(numberStr: selectedAlertNumber)
if alertNumber > 1 {
unitStr.append("s")
}
let alertText = "...\(selectedAlertNumber) \(unitStr) before event."
alertTimeCell.setAlertText(alertText: alertText)
// set alert date/time
}
Выпускаемое alertNumber = stringToInt ... линия как я звоню функцию. Я мог бы просто попытаться преобразовать туда, но я хотел бы изолировать проблему, обернув преобразование в свою собственную функцию.
Не удалось добавить, преобразование Int (numberStr) на фрагменте Xcode (например, на игровой площадке); Я пробовал другой подход, когда я разместил этот пример. – PixelStack
Я не могу воспроизвести это - как вы называете 'stringToInt'? [Mcve] был бы наиболее полезен. Как побочная заметка, вы не должны аннотировать «numberStr» как IUO - это было бы намного безопаснее как необязательный параметр. – Hamish
@Hamish: обновлено мое оригинальное сообщение, чтобы показать, как я вызываю функцию. – PixelStack