首页 > 解决方案 > 无法从数组中删除元素

问题描述

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

但是如果我不想要电子邮件,那么当我单击退格按钮并完全删除电子邮件 ID 时,我还希望将其从我的feedbackEmailsArray.

我怎样才能做到这一点..?

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

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

           //Backspace was pressed
        }
    }

标签: iosarraysswift

解决方案


试试这个。

首先,您将文本字段中的字符串拆分为基于“,”的部分。然后我们清除feedbackEmailsArray然后将电子邮件重新添加到feedbackEmailsArray

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

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

现在validateEmail被调用,我们将参数作为索引处的字符串emailIdsArr[i](例如 i = 5 然后 index = 5 ,因此 validateEmail(email:5@5.com) 将返回 true,因为它是 emailId 格式)

validateEmail是一个布尔函数,如果字符串是 emailID 格式,则返回 true,否则返回 false。

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

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


推荐阅读