list和forward_list不支持运算符操作_使您的Swift代码更具表现力:加法运算符用例

v2-a473fba6a7dc9a0880b5070ae3e42ff6_1440w.jpg?source=172ae18b

我喜欢阅读简短而富有表现力的代码。由于开发人员比编写代码花费更多的时间来阅读代码,因此表达性通常是强制性的。

除非简短不会掩盖意图,否则我宁愿使用简洁的表述,也不愿使用简短的表述。例如:

v2-a41f382c0b2758c0ab1190cd75b7d6a8_b.jpg

该示例显示了2个连接字符串的选项:使用加法运算符+appending(_)字符串方法。
您更喜欢哪种选择?我想简明扼要greeting + who

Swift中的运算符重载使得可以编写短表达式。许多类型的喜欢IntStringArray过载除了(+)和加法赋值(+=)运算符。它使相应类型的操作更加直观。

您想编写表达性代码吗?我确定你会的!因此,让我们继续一个有趣的类型列表,这些类型支持for +和的运算符重载+=
为了比较,还介绍了具有相同行为的替代方法。

1.总数

显然,加法运算符的常规用法是要对数字进行算术加法。例如,4 + 8被评估为12

由于Swift是类型安全的,因此当两个操作数完全相同的类型(,但不是或)时,您可以应用++=运算符。 Int + IntUInt + IntFloat + Int

所有SWIFT号码类型IntFloatDouble和其他支持加法运算。让我们看一个示例:

v2-d89cc9fc489c0582cee0af759b753a17_b.jpg

x + y执行两个整数的算术加法。干净利落。
该表达式通过将变量附加到变量上来对其进行x += y突变(与相同)。在此操作期间发生了突变,因此必须使用将其声明为变量。 xyx = x + yxvar

加法运算符的等效方法是adding(_:)和mutating add(_:)。这些方法适用于FloatDouble,但不适用于Int
让我们看看它们的作用:

v2-e1b13ef593dbe4e77f4814dc43cfee39_b.jpg

prDouble型。
的调用p.adding(r)与相同p + r。分别p.add(r)突变p并等同于p += r

2.连接字符串

加法和加法赋值运算符可以执行字符串连接。例如,"abc" + "def"创建一个字符串"abcdef"

让我们来看一个例子:

v2-443e67dacc199f4061caa23c9768aa5c_b.jpg

message + name连接两个字符串。
该语句message += name还执行串联。它message通过附加到其结尾name字符串进行修改。

您还可以使用等效的方法appending(_:)和mutating append(_:),它们比较冗长。让我们转换上面的示例:

v2-7c0ad065c6b2478ee0661540369df794_b.jpg

调用将message.appending(name)连接messagename,并返回结果。message变量未修改。
调用message.append(name)正在使message变量变异并附加到其结束name字符串。

3.串联数组

加法运算符对于连接数组很有用。[val1, val2] + [val3]创建[val1, val2, val3]

串联数组必须具有相同类型的元素。

v2-8691ec3ab1a10f055e5d2f7d5ad8a0b5_b.jpg

该表达式colors + darkColors创建一个新数组,其中包含from元素,colors然后包含from 元素darkColors。通过将的尾部元素添加到,colors += darkColorscolors数组更改为适当位置darkColors

另外,您可以使用mutating append(contentsOf:_),它等效于加法赋值运算符(+=)。转换上面的示例:

v2-66b0c0a04e4d21a9c2634d8c8c0260a2_b.jpg

的调用就位colors.append(contentsOf: darkColors)修改colors并附加的元素darkColors

4.将时间间隔添加到日期

加法运算符可以表达性地将间隔添加到Date。该表达式将date + timeInterval创建一个新的表达式,Date并添加指定的时间量。添加任务会修改日期date += timeInterval

让我们看看如何做到这一点:

v2-38fdd01cda12ec22ee970bbacc9890bc_b.jpg

oneDay是一个间隔,其中包含24小时内的秒数。dateFormatter为创建日期2017-02-15
表达式date + oneDay的计算结果为一个新的日期dayAfterDate是从创建dateoneDay时间间隔添加到它。

如果要date直接修改,请使其为变量,然后使用附加赋值运算符+=

v2-2acb9a65e37c4a5ed75c8932cf3ddfae_b.jpg

date =+ oneDaydate通过添加oneDay几秒钟来进行变异。

Date提供相同行为的方法是addingTimeInterval(_:)和mutating addTimeInterval(_:)

关于日历的提示

提供的修改日期的方式可调整绝对值。添加更长的时间间隔(例如数周或数月)时,您可能会得到意外的结果。

在大多数情况下,Calendar使用是可取的。它可以根据夏时制,不同天数的月份等提供准确的日期修改。

让我们更新上面的示例,并使用一个日历实例Calendar.current

v2-9e0637eea225544c2d295c74ed80f0e6_b.jpg

5.总和测量

基金会最近的更新引入了测量和单位。它允许代表距离(例如10 miles12 kilometers),重量(8 kg)等等。

好的部分是Measurement结构重载了+运算符(以及* - / < ==)。这使测量操作变得简单明了。

让我们总结两个公里数的距离:

v2-4fd101e901463aa24704cd17a356b037_b.jpg

morningRuneveningRun描述某人早上和晚上跑步的距离。
简单而简单的加法运算符用于查找每日跑步距离:morningRun + eveningRun

加法运算必须相加描述相同类型的物理单位(长度,质量,速度和测量更多)。

例如,将速度和质量值相加是没有意义的。在这种情况下,Swift会触发错误:

v2-8e0cc5869e0b310066a48599b63c99f9_b.jpg

turtleSpeedturtleWeight是保存不同类型单位的度量:UnitLength.kilometersUnitMass.grams。它们不兼容,因此Swift会触发错误。

Measurement结构不提供操纵方法。在这种情况下,您仅需使用运算符。
在我看来,这是一个不错的决定,因为操作员非常适合进行测量。

六,结论

如图所示,加法和加法赋值运算符提供了简洁的语法。

通常,这些用于对数字求和并连接字符串。

连接数组,处理日期和总和测量时,还可以从简洁的语法中受益。

原著作者:德米特里·帕夫鲁汀

文章来源:国外

原著链接:

Dmitri Pavlutin Blog​dmitripavlutin.com
v2-b9982406b5748fc7a5f0a51ce00e670f_ipico.jpg

PS:原著文章内容为英文版本,建议使用360极速浏览器进行翻译阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值