Я хочу создать приложение с 2 текстовыми полями, 4 кнопками и текстовым представлением. 1, которая очищает содержимое первого текстового поля, и еще одна кнопка, которая вводит текущее время, округленное до ближайших 4, и текстовое представление для отображения общего времени в минутах. То же самое с другим текстовым полем. Это приложение для расчета общего времени, потраченного на что-либо, в минутах.
Я также хочу ограничить количество возможных вставляемых символов до 5, поскольку время имеет максимум 5 символов, как в «15:00». Мне удалось создать наблюдаемый объект:
class TextFieldManager: ObservableObject {
let characterLimit = 5
@Published var userInput = "" {
didSet {
// Limit the max length of the field
if userInput.count > characterLimit {
userInput = String(userInput.prefix(characterLimit))
} else if userInput.count >= 4 {
// call the setTotalTime func or something to set totalTime
}
}
}
}
что действительно хорошо работает.
Я также могу очистить текстовое поле и установить текущее время, округленное до ближайшего 5, но я не могу ограничить количество символов до 5 И заставить кнопки делать что-то одновременно.
Так что прямо сейчас он может: - Ограничить количество символов до 5
ИЛИ возможность:
- очистить текстовое поле с помощью кнопки
- время ввода теперь округляется до ближайшего 5 в текстовое поле с помощью кнопки.
Если я использую метод наблюдаемого объекта, когда он находится над блоком тела моего ContentView:
@ObservedObject var startTimeManager = TextFieldManager()
@ObservedObject var endTimeManager = TextFieldManager()
и это внутри тела для текстовых полей:
TextField("hh:mm", text: $startTimeManager.userInput)
TextField("hh:mm", text: $endTimeManager.userInput)
и класс TextFieldManager, как показано выше, чем теперь я больше не знаю, как получить значение текстового поля.
Если внутри ввода кнопка текущего времени, я пытаюсь установить время, выполнив
$startTimeManager.userInput = "whatever the current time is"
я получаю сообщение об ошибке, что я не могу изменить значение типа binding<String>
что-то. Точно так же я также не могу очистить текстовое поле таким же образом.
Также я хотел бы вызвать функцию внутри этой части:
} else if userInput.count >= characterLimit {
// call the setTotalTime func or something to set totalTime
}
У меня есть файл Functions.swift, в котором есть как класс TextFieldManager, так и моя функция, которую я хочу вызвать, но если я попытаюсь вызвать функцию здесь, он говорит, что функция не существует? И внутри функции я снова хотел бы иметь доступ к значениям текстовых полей во время вызова, но я не знаю, как читать значения текстовых полей изнутри функции.
Я надеюсь, что у меня есть смысл, и что кто-то сможет мне помочь или указать правильное направление. Я сделал то же приложение для android (студия android), windows (python3) и Mac (python3), но эта штука с iphone и Xcode действительно не хочет работать. Я просмотрел кучу обучающих видео и руководств, но ни один из них не пытается делать то, что я пытаюсь сделать. Как я уже сказал, я могу заставить работать оба, но никогда вместе, и в обоих случаях я не могу каким-то образом получить доступ к значениям текстового поля внутри функции. Я чувствую, что должен быть так близко, но что-то не складывается у меня в голове.
Также, пока я нахожусь в этом, в Python 3, чтобы поймать все ошибки и позволить им проходить беззвучно, я могу сделать:
Try:
break_my_stuff = int("Break my stuff)"
ignore_some_more_stuff = int("ignore some more stuff)"
etc.
etc.
except Exception:
# catch silently and do nothing
pass
Есть ли что-то подобное в swift, потому что
do {
breakMyStuff = whatever might make something break in swift
ignoreSomeMoreStuff = whatever might make something break in swift
etc.
etc.
} catch {
// do nothing and pass silently
}
не работает, потому что нужно что-то попробовать, а я не смог опробовать весь раздел, как на Python.