Swift Array contains 函数使构建时间变长

2023-11-29

我不确定这是否属于 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 +根据我的经验,这是构建时间缓慢的最常见原因。当人们抱怨构建时间时,我总是问“你已经被束缚了+,不是吗?”大约90%是正确的。例如:

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

and also

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)"
    }
}

那么其余的大部分代码都会变得更简单。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift Array contains 函数使构建时间变长 的相关文章

  • Swift UIToolBar 追加 UIBarButtonItem 项目

    我的语法不正确 有人知道这里缺少什么吗 我正在使用 Xcode 6 beta 3 并且尝试将工具栏项动态添加到 viewDidLoad 中的 手动添加的 工具栏 有两个问题 首先 我无法将工具栏中的项目附加到数组中 其次 虽然编译器允许我调
  • 无法索引空数组

    我正在使用一个模板 该模板根据服务器备份是否成功的条件设置单元格颜色 我有下面的代码 它不断抛出错误 无法索引到空数组 Cannot index into a null array At C Users admin Desktop new
  • 数组是指针吗? [复制]

    这个问题在这里已经有答案了 数组和指针在 C 和 C 中的实现方式是否不同 我遇到过这个问题 因为在这两种情况下我们都从元素的起始地址访问元素 所以 他们之间应该有密切的关系 请解释一下它们之间的具体关系 谢谢 让我们先把重要的东西放在一边
  • javaScript从单个值数组返回一个新的成对值数组[重复]

    这个问题在这里已经有答案了 可能的重复 将数组分割成块 https stackoverflow com questions 8495687 split array into chunks 我正在尝试将值数组转换为新的配对值数组 例如我需要转
  • 以编程方式设置 UITextField 占位符颜色

    如何在 swift 中以编程方式设置 UITextField 占位符颜色 1 创建一个具有所需颜色的 AttributedString 2 将此 AttributedString 设置为文本字段 attributePlaceholder 属
  • 如何创建指针数组?

    我正在尝试创建一个指针数组 这些指针将指向我创建的 Student 对象 我该怎么做 我现在拥有的是 Student db new Student 5 但该数组中的每个元素都是学生对象 而不是指向学生对象的指针 谢谢 Student db
  • 打印数组时出错

    我得到这个代码 import java util import java io public class Oblig3A public static void main String args OrdAnalyse O new OrdAna
  • 还有比这更好的方法在通知附件中使用 Assets.xcassets 中的图像吗?

    我想将 Assets xcassets 中的图像附加到通知中 我已经寻找解决方案大约一个小时了 这似乎是执行此操作的唯一方法 func createLocalUrl forImageNamed name String gt URL let
  • Perl:散列 2 中数组的数值排序(施瓦茨变换)

    这实际上是该线程的后续内容 Perl 散列中数组的数字排序 https stackoverflow com questions 7914931 perl numerical sort of arrays in a hash 我无法编辑原始问
  • AVPlayer Swift:如何隐藏控件并禁用横向视图?

    因为这是我的第一篇文章 所以简单介绍一下我 通常我设计东西 主要是 UI 但我真的很想跨入编程领域 以便更好地理解你们 所以我决定构建一个小应用程序来开始 所以我已经花了几个小时试图解决这个问题 这是我的第一个应用程序项目 所以我为我的新手
  • 在 Swift 中使用模板键入别名声明

    如何避免函数中多余的限制声明f0 f1 f10 class SomeClass
  • 检查 switch 语句中的可用性

    if a Enum输入添加新的case在新的操作系统版本中 如何检查可用性switch陈述 像一个Enum in StoreKit below public enum Code Int public typealias ErrorType
  • 将单独的范围放入二维数组中

    我正在尝试获取大小的二维数组 x 3 填充 X只是工作表的大小 行数 并且有 3 列我感兴趣 例如 这些列彼此不靠近arr i 0 应从 AA 栏开始填写 arr i 1 应来自 K 列 并且arr i 2 需要来自 L 列 我尝试按以下方
  • JS如何获取多维数组的最大深度?

    我有一个多维数组 我想知道它的最大深度 我发现了这个灵魂 但它不适用于对象数组 const getArrayDepth arr gt return Array isArray arr 1 Math max arr map getArrayD
  • 二元运算符“&=”不能应用于 Swift 中的两个“Bool”操作数

    我正在尝试进行多次检查 将结果累积在Bool 我的代码是 var validParams login characters count gt 4 validParams password characters count gt 6 vali
  • 搜索结果中的 Swift 搜索结果控制器连接到另一个视图控制器

    Problem 我有一个表格视图 用户可以滚动查找某些内容或使用搜索栏 搜索栏不是使用 StoryBoard 创建的 我的观点有一个UISearchController处理搜索栏和搜索结果更新 我遇到的问题是 自从我SearchResult
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • 获取 iOS Swift 中 UIViewController 的所有列表

    有没有办法获取 iOS Swift 项目中的所有 UIViewController 我想获取所有 UIViewController 的数组并检查特定的 UIViewController 是否存在 我必须找到项目中是否存在特定的 UIView
  • 如何以编程方式设置 UICollectionViewCell 宽度和高度

    我正在尝试实施一个CollectionView 当我使用自动布局时 我的单元格不会改变大小 但会改变它们的对齐方式 现在我宁愿将它们的尺寸更改为例如 var size CGSize width self view frame width 1
  • 使用 CommonCrypto 的 Swift AES 加密

    我正在开发一个 iOS 应用程序代码7 1 with 斯威夫特2 1我正在尝试进行简单的加密AES 128 位 and PKCS7填充使用通用加密库 该代码有效 但每次我尝试投射NSData反对NSString然后对于 String 我得到

随机推荐

  • WiX可配置目录的含义是什么?

    我有一个测试安装程序 有 2 个功能 A 和 B A 有 2 个文件 a1 和 a2 B 还有 2 个文件 b1 和 b2 每个文件属于单个组件 Feature A a1 a2 Feature B b1 b2 每个文件的安装位置如下 有些混
  • 从 SqlDataReader 转换为 JSON

    public string toJSON SqlDataReader o StringBuilder s new StringBuilder s Append if o HasRows while o Read s Append Id o
  • PHP CURL 和 SSL 证书(或证书链)

    再会 我有 REST API 可以通过 SSL https 访问 我想将正确的证书 或证书链 与我编写的 PHP 和 CURL 脚本一起发出请求 以下是我的目标的证书方式 http api vkontakte ru 在 Firefox 中看
  • [Shiny]:在另一个tabPanel中添加到另一个tabPanel的链接

    我试图在我的 主页 选项卡面板上放置一个链接到我的应用程序的所有其他选项卡面板 想法如下 ui navbarPage tabPanel home fluidPage fluidRow box this 1st box should lead
  • 将 Oracle SQL Select 转换为 PostgreSQL select

    我有这样的SQL语句 SELECT ABX ABX APO NUMBER COUNT A1 PROCESS MODE AS NUM PLANNING COUNT A2 PROCESS MODE AS NUM SETUP COUNT A3 P
  • cmake 链接错误

    我试图理解为什么在编译使用 CMake 生成的项目时出现链接错误 CMakeFiles txt 为项目的每个文件夹构建一个静态库 然后通过以下方式将所有它们链接在一起 root CMakeLists txt add subdirectory
  • 如何在 ASP.NET MVC 中读取 PPT 文件?

    我的桌面上有一个名为 slide ppt 的 PPT 文件 我想在我的文件夹中阅读该 PPT 文件的所有幻灯片ReadSlide功能如下 public void ReadSlide 如何使用 C 代码读取 PPT 文件中的所有幻灯片 使用如
  • 如何以编程方式在 MoinMoin 中创建新页面?

    我想编写一个 python 脚本来调用一些外部 REST 服务 然后根据我拉回的数据创建 MoinMoin 页面 我在 wiki 农场配置中的 CentOS 5 3 和 MoinMoin 1 9 3 上使用 Python 2 4 3 请注意
  • 如何通过 TextBlock 文本值设置 TextBlock 的 Foreground 属性?

    可以通过 TextBlock 文本值设置 TextBlock 的前景属性吗 例如 文本值为Mike 前景属性为Black 值为Tim 属性值为green等 我用google搜索 但没有找到任何解决方案 如果您希望灵活地做一些聪明的事情 例如
  • 为什么 Rails UJS ajax:success bind 被调用两次?

    我有一个简单的表格 form for posts path id gt new post remote gt true do text field tag post input submit tag Post 我已将回调绑定到ajax su
  • rundll32 url.dll,FileProtocolHandler

    我在用着rundll32 url dll FileProtocolHandler my file dotx在 Windows 下打开文件 它适用于 docx 文档 但当我尝试使用 dotx 文档 模板文档 时 它会根据模板创建一个新的 do
  • 如何使用react-google-maps包通过放大反应来聚焦于标记位置

    如何通过缩放对焦到标记位置 一旦标记位置更改为不同位置 我需要手动放大和缩小并转到市场位置 从字面上看 我需要手动滚动并放大到标记的位置 这很困难 我在用https github com tomchentw react google map
  • 查找数组中的最大值

    将一千 1000 个元素输入到数组中 无内存限制 众所周知 在输入元素时 每当我们输入一个值时 我们都可以通过检查来更新输入值的最大值 但想象一下 如果最大值的位置在 900 左右 如果我从位置 800 到 1000 删除 200 个元素
  • 在什么情况下需要关闭 HTTP 连接?

    在什么情况下需要关闭 HTTP 连接 HTTP 不是一种具有 连接 的协议类型 它是一种具有 连接 的协议 这就是他们所说的 无状态 这意味着每个请求都与其他请求分开 这就是为什么我们有会话 cookie 之类的东西 人们必须设法允许信息在
  • Android 翻转图像动画

    我想通过翻译动画在android中翻转图像 例如 假设我有一张卡 当翻译动画开始时 它会将卡片显示到新位置 现在这里的卡应该翻转吗 从背面到正面 我怎样才能做到这一点 APIdemos 中的示例名称是 旋转3d动画 java 也只需检查下面
  • 宏的逆柯里化?

    假设我们有一个 define FOO x y something 我想构建这样的宏 define BAR that BAR x y 会打电话FOO x y 如果可能的话 我该怎么做 我尝试了以下操作 define BAR x FOO x B
  • Highcharts 删除 x 轴上的空间

    我正在尝试使用 Highcharts 库构建面积图 突然我发现在我的实际数据开始之前 x 轴上有一些间距 我想用适当的数据从 0 0 轴开始绘制图表
  • BeancreationException+NosuchBeandefinition异常

    我正在使用 Spring Boot 开发 Spring 4 应用程序 在 com test tm 包中 应用类 SpringBootApplication EnableJpaRepositories repositoryFactoryBea
  • flash AS3 如何删除舞台事件侦听器

    我正在 flash 和 as3 中构建动画 我有一个添加舞台的功能 eventListener stage addEventListener Event ENTER FRAME setScrollPercent false 0 true 由
  • Swift Array contains 函数使构建时间变长

    我不确定这是否属于 Stack Overflow 如果不属于 请告诉我 我有这段代码将联系人添加到数组中 如果数组中已存在具有该电话 姓名组合的联系人 则不会再次添加它 意味着没有重复项 它按预期工作 但它大大增加了构建时间 我正在寻找更好