欢迎来真孝善网,为您提供真孝善正能量书籍故事!

揭秘“Swifty”代码的独特魅力:速度与效率的完美结合

时间:11-07 神话故事 提交错误

今天给各位分享揭秘“Swifty”代码的独特魅力:速度与效率的完美结合的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

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)。

用户评论

眼角有泪°

哇,太酷了!我一直想弄明白 Swifty 的原因,原来是速度啊!

    有11位网友表示赞同!

迷路的男人

确实,速度确实很重要,对于我这种总是急着做老板的程序员来说太重要了。

    有11位网友表示赞同!

情如薄纱

"Fast" 这个词语用得真好,直 HIT 我心口啊!

    有14位网友表示赞同!

冷嘲热讽i

感觉 Swift 越来越顺手了,不像以前那样费劲儿。可能是“Swifty”就等于“快”?

    有14位网友表示赞同!

夏至离别

我之前还在纠结为什么大家都说 Swift 使用起来很流畅,原来是速度快的原因啊!

    有10位网友表示赞同!

寒山远黛

我一直觉得 Swift 的代码结构非常简洁,现在才知道这是速度的体现!学习好这个语言!

    有11位网友表示赞同!

鹿先森,教魔方

这篇文章让我对 "Swifty" 更加了解了,原来不是我手艺不够熟练导致写起来慢,是 Swift 本身就快啊!

    有20位网友表示赞同!

封锁感觉

看来要好好学习一下 Swift 的“Fast”之处了。

    有7位网友表示赞同!

别留遗憾

速度这个词语真是太到位了!Swift 可以让我更快地开发程序,节省时间更有效率!

    有14位网友表示赞同!

仰望幸福

这篇文章很有启发意义,我要去体验一下 Swift 的速度到底有多快了。

    有13位网友表示赞同!

瑾澜

文章写的很好,很清晰地解释了 "Swifty" 背后的原因。

    有12位网友表示赞同!

大王派我来巡山!

我以前不太了解 Swift,现在看完文章对我这个初学者来说更感兴趣了。

    有7位网友表示赞同!

万象皆为过客

确实,速度是最吸引人的地方,Swift 让我开发速度大大提升!

    有8位网友表示赞同!

君临臣

这种注重速度的编程语言越来越有优势了!

    有17位网友表示赞同!

。婞褔vīp

学习 Swift 不光是为了掌握知识,更快地开发也很重要啊!

    有14位网友表示赞同!

微信名字

这篇文章可以帮助我更好地理解 Swift 的魅力所在。

    有6位网友表示赞同!

发型不乱一切好办

Swift 这个语言真是越来越棒了!

    有18位网友表示赞同!

关于道别

感谢作者分享这个有价值的文章!

    有14位网友表示赞同!

【揭秘“Swifty”代码的独特魅力:速度与效率的完美结合】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活