Как получить текст текстового поля изнутри функции? - PullRequest
1 голос
/ 19 июня 2020

Я хочу создать приложение с 2 текстовыми полями, 4 кнопками и текстовым представлением. 1, которая очищает содержимое первого текстового поля, и еще одна кнопка, которая вводит текущее время, округленное до ближайшего 4, и текстовое представление для отображения общего времени в минутах. То же самое с другим текстовым полем. Это приложение для расчета общего времени, потраченного на что-то в минутах.

app layout

Я также хочу ограничить количество возможных вставляемых символов до 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.

1 Ответ

1 голос
/ 19 июня 2020

Если внутри ввода кнопка текущего времени, я пытаюсь установить время, выполнив

$ startTimeManager.userInput = "независимо от текущего времени"

вы в этом случае привязка не требуется, просто присвойте свойство обычным способом

self.startTimeManager.userInput = "whatever the current time is"
...