Я хочу создать приложение с 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 в текстовое поле с помощью кнопки.
Если i go с помощью метода наблюдаемого объекта, когда у меня это над блоком тела моего 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"
я получаю сообщение об ошибке, что я не могу c изменить значение типа binding<String>
что-нибудь. Точно так же я также не могу очистить текстовое поле таким же образом.
Также я хотел бы вызвать функцию внутри этой части:
} else if userInput.count >= characterLimit {
// call the setTotalTime func or something to set totalTime
}
У меня есть файл Functions.swift, в котором оба класс TextFieldManager - это и моя функция, которую я хочу вызвать, но если я попытаюсь вызвать функцию внутри здесь, он говорит, что функции не существует? И внутри функции я снова хотел бы иметь доступ к значениям текстовых полей во время вызова, но я не знаю, как читать значение текстовых полей изнутри функции.
Надеюсь, я я понимаю, и что кто-то может мне помочь или указать в правильном направлении. Я сделал то же приложение для android (android studio), windows (python3) и Ma c (python3), но эта штука iphone и Xcode действительно не хочет работать . Я просмотрел кучу обучающих видео и руководств, но никто не пытается делать то, что я пытаюсь сделать. Как я уже сказал, я могу заставить их работать, но никогда вместе, и в обоих случаях я не могу каким-то образом получить доступ к значениям текстового поля внутри функции. Я чувствую, что должен быть так близко, но что-то не складывается у меня в голове.
Также, пока я нахожусь на этом, в Python 3, чтобы уловить все ошибки и позволить им пройти незаметно i может сделать:
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.