Что за ошибка?
Также все функции работают кроме действий с дробами. То есть беру условно число 2,5 нажымаю на любое действие(+;-;÷ и т.д.) и сразу выбрасывает с програмы.
Проблема при создание калькулятора на свифт
Непонятно задаете вопрос, но в вашем листинге в двух местах вижу неоправданное использование восклицательных знаков. Извлекайте значения из опционалов всегда безопасно:
guard let …
или
if let …
Возможно, выбрасывает из-за этого. Возможно, нет. Но с принудительными извлечениями значений через “!” поосторожнее. Лучше не употребляйте их никогда, за редким исключением. Например, при создании объектов из UIKit:
private var myButton: UIButton!
Если вы о warning про character, то Xcode ругается, потому что в swift 4 строки обратно стали массивами. И к свойству count нужно обращаться без characters.
Большое спасибо за ответ. С варнингом про character разобрался, здесь спасибо. Но при действиях с дробями все равно выбрасывает (просто первый раз что-то программирую и делал все по видео уроку) вот ошибка после того как выбрасывает.
У вас там в одной строке аж два восклицательных знака)))
Попробуйте так:
var currentInput: Double {
get {
if let text = displayresultlabel.text {
if let value = Double(text) {
return value
}
}
return 0
}
set {
//...
}
}
Можно записать покороче, но так нагляднее. Хорошенько изучите опционалы, это одна из самых классных особенностей swift.
Скорее всего проблема в том, Double() не может преобразовать введенный текст в числовое представление. Например, вы вводите “dfdfsdfs”. Это не преобразуется в тип double. Или вы вводите "2 " (с пробелом/пробелами). Или вы вводите “2,2”, а надо “2.2”. Или можно еще много вариантов придумать. Короче, проверяйте введенные данные на правильность формата. Например, регулярным выражением:
let text = " 2.2 ".trimmingCharacters(in: .whitespacesAndNewlines)
if let _ = text.range(of: "[0-9]+(\\.[0-9]+)?", options: .regularExpression) {
print ("valid number")
}
спасибо, помогло, действия с дробями уже работают, но все равно ошибка, при нажатие на равно всегда выдает 0, там в return 0 должен быть? спасибо кстати за совет что выучить нужно
Прежде чем данные попадут в displayresultlabel, они должны быть проверены на правильный формат. К примеру, опять же регулярным выражением. Если формат неверный, то вы должны оповестить об этом пользователя. Например, алертом. И не производить никакие операции с числами до тех пока он не введет число в правильном формате.
Тогда return 0 в моем примере оправдано.
Не за что. И избавляйтесь от восклицательных знаков. Я смотрю, у вас их там еще полным-полно. А то приложение так и будет падать.