大家好,今天小编来为大家解答探索 Swift 代码的精髓:高效与速度的奥秘这个问题,很多人还不知道,现在让我们一起来看看吧!
安全(Safe):尽量减少开发人员的错误;迅速(Fast):快速执行;表现力(Expressive):因为Swift 的目标是尽可能清晰易懂。是什么让代码“Swifty”? —— Safe 解释了如何有选择地使用类型系统的方面和功能,以使我们的代码更易于理解和使用。
是什么让代码变得“Swifty”? —— Expressive 解释了如何使用富有表现力的命名和API 设计来传达我们代码的意图
Swifty 代码—— 快速
性能之路(The path to performance)
Swift 的第二个核心目标是更快,但总的来说有点棘手。毕竟,编写高性能代码的一个主要部分是测量、微调和再次测量。然而,让我们的代码在性能方面与Swift 本身更加一致的一种方法是充分利用标准库—— 提供的功能,尤其是在处理集合(例如字符串)时。
正如我们在《Swift:字符串解析》和《Swift:集合切片》中看到的,Swift 标准库针对性能进行了高度优化,允许我们以高效的方式执行许多常见的集合操作- 假设我们使用正确的API。
例如,从字符串中删除一组特定字符的常见方法是使用旧的ReplacementOccurences (of: with :) API,该API 是Swift 的String 类型继承自其表兄弟Objective-C 的NSString。这里我们使用一系列API 调用来通过删除一组特殊字符来清理字符串:
让sanitizedString=字符串
.replacingOccurrences(of: "@", with: "")
.replacingOccurrences(of: "#", with: "")
.replacingOccurrences(of: "", with: "")
.replacingOccurrences(of: "", with: "") 上述实现的问题在于,它将导致我们的字符串—— 使用较短的字符串进行4 次单独的迭代,或者在不经常遇到的代码路径中这可能不是执行上述操作时会出现问题,但当我们需要最大性能时可能会成为瓶颈。
值得庆幸的是,Swift 通常不需要我们在性能代码和优雅代码之间进行选择,我们所要做的就是切换到更合适的API,该API 只删除Set 中包含的每个字符对字符串的一次传递。 像这样:
让字符ToRemove:设置=["@", "#", "", ""]
string.removeAll(where:charactersToRemove.contains) 因此,为了让我们的代码从性能角度来看更加“Swifty”,有时我们要做的就是探索标准库在面对给定任务时必须提供什么,特别是在集合方面,机会相当高,因为有一个优雅、简单的API,并且它还为我们提供了出色的性能特征。
文章来自John Sundell 的《什么让代码变得“Swifty”?》关于快
附几个简单性能优化例子:
本文也使用了这个方法iOS - DeviceToken 解析解析Tokenswiftfilter 会创建一个新数组并对所有元素进行操作,例如:bigArray.filter { someCondition }.count 0 写成如下形式。性能改进良好:
bigArray.contains { someCondition } 这种做法会比原来快很多,主要是因为两个方面: 不会创建一个全新的数组进行计数,而且一旦找到第一个匹配元素,就会提前退出。一般来说,只有当您需要所有结果时才应该选择使用过滤器。
swiftString 的前缀总是从头开始,例如:extension String {
var allPrefixes1: [子字符串] {
返回(0.self.count).map(self.prefix) }
}
让你好="你好"
hello.allPrefixes1 //["", "H", "He", "Hel", "Hell", "Hello"] 这段代码看起来很简单,但是效率很低。首先,它会遍历一次字符串来计算它的长度,这没什么大不了的。然而,接下来的每一次n + 1 次调用prefix 都是一个O(n) 操作,因为prefix 总是要从头开始,然后遍历字符串上所需数量的字符。在另一个线性复杂度运算中运行一个线性复杂度运算意味着算法复杂度将为O(n2)。随着字符串长度的增加,该算法所花费的时间将呈二次方增加。
如果可能,高效的字符串算法应该只执行一次字符串遍历,并且应该对字符串的索引进行操作以表示感兴趣的子字符串。这是相同算法的另一个版本:
扩展字符串{
var allPrefixes2: [子字符串] {
return [""] + self.indices.map { self[.index] 中的索引} }
}
让你好="你好"
hello.allPrefixes2 //["", "H", "He", "Hel", "Hell", "Hello"] 上面的代码仍然需要迭代一次字符串以获得索引集。然而,一旦这个过程完成,map中的下标操作的复杂度就是O(1)。这使得整个算法的复杂度保持在O(n)。
关于探索 Swift 代码的精髓:高效与速度的奥秘到此分享完毕,希望能帮助到您。
【探索 Swift 代码的精髓:高效与速度的奥秘】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章一定探讨Swift语言的特点吧!
有13位网友表示赞同!
我一直觉得Swift写的代码很简洁 elegant 的啊!
有17位网友表示赞同!
速度确实是编程语言的一个重要因素,尤其是在应用开发方面。
有15位网友表示赞同!
想知道哪些技术让Swift实现代码加速了?
有6位网友表示赞同!
这篇文章也许会介绍一些高效的Swift编写技巧来提高效率:
有18位网友表示赞同!
我正在学习Swift,希望能借此机会了解更多关于它的优缺点!
有9位网友表示赞同!
"Swifty" 经常被人用来形容简洁、易懂的代码片段,看来这篇文章会从速度和风格两个方面分析?
有18位网友表示赞同!
我很感兴趣看到文章中提到的“Fast” 如何具体应用到代码中。
有18位网友表示赞同!
也许篇文章会比较 Swift 与其他语言的速度表现?
有14位网友表示赞同!
学习Swift一段时间了,还是想知道哪些地方才是最让我写得快的地方。
有13位网友表示赞同!
期待文章能分析一些提高代码速度的通用方法,不仅仅针对Swift。
有9位网友表示赞同!
Swift开发的游戏和App确实运行非常流畅!
有10位网友表示赞同!
现在有很多资源都专门针对 Swift 的快速开发,这篇文章会不会分享一些常用的工具?
有12位网友表示赞同!
想要了解什么技术能让 Swift 如此高效?是语言本身的设计?还是编译器的优化?
有5位网友表示赞同!
也许能介绍一个例子,来直观地展示 Swift 代码的速度优势?
有16位网友表示赞同!
文章提到"Fast”,会不会分析一下如何编写高性能的 Swift 代码 ?
有10位网友表示赞同!
Swift 的语法确实相对简洁易读啊,这在一定程度上也会影响代码的执行效率吧?
有13位网友表示赞同!
除了速度之外,Swift 还有哪些特点让人爱不释手呢?
有14位网友表示赞同!