我的文本字段中有三个电子邮件ID。这三封电子邮件也存储在名为feedbackEmailsArray的数组中。这些电子邮件ID也以逗号分隔。

但是如果我不需要电子邮件,那么当我单击Backspace按钮并完全删除电子邮件ID时,我也希望将其从feedbackEmailsArray中删除。

我该如何实现..?

编辑1 :这就是我删除电子邮件ID的方式:

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

           //Backspace was pressed
        }
    }

最佳答案

试试这个。

首先,您将文本字段中的字符串分成基于','的部分。然后我们清除feedbackEmailsArray,然后将电子邮件添加回feedbackEmailsArrayvalidateEmail将检查当前字符串是否为有效电子邮件,如果有效字符串,则将其添加到数组中。如果要在程序中的任何位置使用validateEmail,可以将其设置为全局函数或静态函数。

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 validateEmail函数检查您键入的内容是否为有效格式,即“[email protected]”。现在,每次在该电子邮件字段中退格时,emailIds变量将获得整个字符串(abc @ abc.com,bcd @ bcd.com,asd @ a)。在此字符串中,asd @ a不是有效的电子邮件。现在,emailIDs.split将根据emailIds字符上的数字拆分,变量中的字符串。这些以emailIdsArr的形式存储在emailIdArr[0],emailIdArr[1],emailIdArr[2]...

for循环使用emailIdArr.count获取emailIdArr中的索引总数。 where emailIdsArr.indices.contains(i)是检查索引是否有效的简单检查。只是为了使其防撞(由@iOSDev添加到我的答案中)。

现在调用了validateEmail,并且我们在emailIdsArr[i]的索引处将其作为字符串提供给参数(例如i = 5然后index = 5,因此validateEmail(email:[email protected])会返回true,因为它采用的是emailId格式)
validateEmail是一个布尔函数,如果字符串采用emailID格式,则返回true;否则返回false。

因此,如果validateEmail返回true,则该电子邮件将附加到feedbackEmailsArray

由于我们正在使用append并且可以随时更改emailId的数量,因此每次调用整个函数时,我们都必须清除整个数组,因此feedbackEmailsArray.removeAll()放置在for循环的外部和上方。

07-27 13:16