Невозможно удалить элементы из массива - PullRequest
2 голосов
/ 15 января 2020

У меня в текстовом поле три идентификатора электронной почты. Эти три электронных письма также хранятся в массиве с именем feedbackEmailsArray. Эти идентификаторы электронной почты также отделяются друг от друга запятой.

Но если я не хочу получать электронную почту, то, когда я нажимаю кнопку возврата и полностью удаляю идентификатор электронной почты, я также хочу его быть удаленным из моего feedbackEmailsArray.

Как мне этого добиться? ..

РЕДАКТИРОВАТЬ 1 : Вот как я удаляю идентификатор электронной почты:

    if let char = string.cString(using: String.Encoding.utf8) {
        let isBackSpace = strcmp(char, "\\b")
        if (isBackSpace == -92) {

           //Backspace was pressed
        }
    }

1 Ответ

1 голос
/ 15 января 2020

Попробуйте это.

Сначала вы разбиваете строку в текстовом поле на части, основанные на ','. Затем мы очищаем feedbackEmailsArray и затем добавляем электронные письма обратно в feedbackEmailsArray

validateEmail, чтобы проверить, является ли текущая строка действительным письмом или нет, если это действительное письмо, оно будет добавлено в массив. validateEmail можно сделать глобальной функцией или функцией c, если вы хотите использовать ее в любом месте программы.

func validateEmail(email:String) -> Bool {

    let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
    return emailPredicate.evaluate(with: email)

}

var emailIds = yourtextfield.text
var emailIdsArr = emailIds.split(separator: ",")
feedbackEmailsArray.removeAll()
for i in(0..<emailIdsArr.count) where emailIdsArr.indices.contains(i)
{

    if validateEmail(email:emailIdsArr[i]) == true
    { feedbackEmailsArray.append(emailIdsArr[i]) }

}

Пояснение : @testname The validateEmail Функция проверяет, есть ли введенный вами текст в правильном формате или нет, то есть 'abc@abc.com'. Теперь, каждый раз, когда вы возвращаетесь в это поле электронной почты, переменная emailIds будет получать всю эту строку (abc@abc.com,bcd@bcd.com,asd@a). В этой строке asd@a не является действительным адресом электронной почты. Теперь emailIDs.split будет разбивать строку в переменной emailIds на основе числа на символе ,. Они хранятся в emailIdsArr как emailIdArr[0],emailIdArr[1],emailIdArr[2]...

. Для l oop получает общее количество индексов в emailIdArr с помощью emailIdArr.count. where emailIdsArr.indices.contains(i) - это простая проверка, чтобы проверить, является ли индекс действительным. Просто чтобы сделать это доказательством sh (было добавлено @iOSDev в мой ответ).

Теперь вызывается validateEmail, и мы передаем аргумент в виде строки с индексом emailIdsArr[i] (например, i = 5, затем index = 5, поэтому validateEmail (email:5@5.com) вернет true, поскольку он имеет формат emailId)

validateEmail - логическая функция, которая возвращает true, если строка имеет формат emailID, и возвращает false если это не так.

Так что, если validateEmail вернет true, это электронное письмо будет добавлено к feedbackEmailsArray.

Так как мы используем append, и число emailIds можно изменить в любое время, мы должны очищать весь массив каждый раз, когда вызывается вся эта функция, поэтому feedbackEmailsArray.removeAll() помещается снаружи и выше для -l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...