gpt4 book ai didi

arrays - Swift Array 包含使构建时间变长的函数

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:24 27 4
gpt4 key购买 nike

我不确定这是否属于 Stack Overflow,如果不属于请告诉我。

我有这段代码可以将联系人添加到数组中,如果数组中已经存在具有该电话/姓名组合的联系人,它不会再次添加(意味着没有重复项)。

它按预期工作,但它显着增加了构建时间,我正在寻找一种更好的方法来使用 contains 或其他一些方法。

var contacts = [CNContact]()

let name: String = contact.givenName + " " + contact.middleName + " " + contact.familyName

if (name.stringByReplacingOccurrencesOfString(" ", withString: "")).length > 1
{
if contact.phoneNumbers.count > 0
{
// Check if contacts already contains name/phone combination
if let phoneNumber: String = (contact.phoneNumbers[0].value as? CNPhoneNumber)?.stringValue
{
if contacts.contains({$0.phoneNumbers.count > 0 && ($0.phoneNumbers[0].value as? CNPhoneNumber)?.stringValue == phoneNumber}) &&
contacts.contains({($0.givenName + " " + $0.middleName + " " + $0.familyName) == name})
{ /* Contact with same name/phone combination already exists in array */ }
else { contacts.append(contact) }
}
}
}

最佳答案

Chained + 是我的经验中构建时间慢的最常见原因。当人们提示构建时间时,我总是问“你有 chained +,不是吗?”大约 90% 是正确的。例如:

let name: String = contact.givenName + " " + contact.middleName + " " + contact.familyName

还有

contacts.contains({($0.givenName + " " + $0.middleName + " " + $0.familyName) == name})

使用插值而不是链式 +:

"\(contact.givenName) \(contact.middleName) \(contact.familyName)"

或者加入一个数组:

[contact.givenName, contact.middleName, contact.familyName].joined(separator: " ")

在这种特殊情况下,我几乎肯定会成为一名助手:

extension Contact {
var fullName: String {
return "\(contact.givenName) \(contact.middleName) \(contact.familyName)"
}
}

然后您的大部分代码都会变得更简单。

链式 + 的问题在于它有很多重载,因此编译器必须对它可能使用的所有不同版本的 + 进行组合爆炸式搜索在这里。

关于arrays - Swift Array 包含使构建时间变长的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556751/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com