2016-01-31 3 views
0

Таким образом я получил следующий код функцию, чтобы прочитать строку ввод в консоли:Проблемы с моим кодом пытается прочитать двойную

func input() -> String { 
    let keyboard = NSFileHandle.fileHandleWithStandardInput() 
    let inputData = keyboard.availableData 
    return NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String 
} 

Проблема, которую я имею интересную один. Я пытаюсь получить результирующий ввод строки и использовать его как double.

//Accept user-input which is string then case into Double value for cakeLength 
print("Please enter the length of the cake (in): ") 
var userText = input() 
cakeLength = Double(userText)! 

По какой-то нечетной причине Xcode сказал мне развернуть часть Double (userText). Тем не менее, когда я пытаюсь запустить код на консоли, я получаю ошибку во время выполнения, которая гласит: «фатальная ошибка: неожиданно обнаружена нуль при развертывании необязательного значения»

Что я делаю неправильно? Я очень новичок в программировании с Swift.

ответ

0

Во-первых, вам не нужна такая сложная функция для чтения ввода с консоли. Функция readLine() от Standard Library сделает это для вас красиво.

Во-вторых, вы вынуждаете разворачивать необязательные значения (используя !), где вы не знаете, что распаковка будет успешной.

Вот небольшой пример использования Стрижи optional unwrapping синтаксис, который позволяет вам проверить, если есть действительный вход, а также проверяет, что входные данные могут быть поданы к Double:

import Foundation 

print("Please enter the lenght of the cake (in):") 

if let inputString = readLine(), inputDouble = Double(inputString) { 
    print("The cake is \(inputDouble) inches") 
} else { 
    print("Your input couldn't be converted to a double") 
} 

Оба readLine() и Double() возвращаемые УСТРОЙСТВА (поскольку они могут не удаться), поэтому вам необходимо развернуть их перед использованием, а также обработать случай, когда они равны нулю. Для этой цели разработан оператор if let.

+0

Привет, спасибо, что ответили. Мне не разрешено использовать функцию readLine(), иначе я бы это сделал. Что касается развертывания, он был инициирован в рамках автоматической отладки Xcode. – Linuxn00b

+0

Почему вам не разрешено использовать 'readLine()'? – tebs1200

+0

Во-вторых, компилятор не просит вас развернуть двойной «по какой-то нечетной причине». Преобразование строки в double может не работать. Рассмотрим «Double (« hello »)' ... Будет ли это работать? Нет. Поэтому построение «Double» из строки «String» возвращает необязательный параметр, так как не может быть действительного двойника. Я бы предложил посмотреть на строку и посмотреть, можно ли ее преобразовать в двойную. – tebs1200

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