swift笔记(二) —— 运算符[通俗易懂]

swift笔记(二) —— 运算符

大家好,又见面了,我是全栈君。

基本运算符

Swift支持大部分的标准C语言的操作符,而且做了一些改进,以帮助开发人员少犯低级错误,比方:
本该使用==的时候,少写了个=, if x == y {…} 写成了 if x = y {…} 你就悲剧了
在使用 +,-,*,/ 的时候,得到的结果溢出了。你还是悲剧了。要做非常多检查保证不溢出才行
然而,在Swift中,我们再也不用操心这些问题了。编译器会帮我们搞定的
Swift还提供了两个C语言中没有的二元操作符 .. 和 …
接下来,我们就来看看Swift中的使用方法

术语(原文中专门列出来) 什么是一元运算符,二元运算符,三目执行符,这里我就不列了。


赋值执行符 (=)
赋值运算符 (=)(感谢 swift技术交流第一平台(355277)的群友 夕颜(1651150754) 指出错别字 )
var a = 5
let b = 10
a = b   
//不解释

重点出现。元组赋值:
let (x, y) = (1, 2)  
//x = 1, y = 2 是一样一样的

可是假设把=写在if 里,在Swift中是通只是编译的,
以后再也不用操心错把== 写成 =了
if x = y {…}  
//这里编译器会提示:
Type ‘()’ does not conform to protocol ‘LogicValue’
也就是说
编译器并不觉得赋值操作符是个Bool表达式

算术执行符
算术运算符(感谢 swift技术交流第一平台(355277)的群友 夕颜(1651150754) 指出错别字 )
1 + 2
5 - 3
2  *  3
10.0 / 2.5
这些写法和C无异,可是,Swift编译器会检查运算结果是否会溢出, 比方:
var myUInt:UInt = 1
myUInt = myUInt – 2  
//编译器会提示: 
Arithmetic operation ‘1-2’(on type’UInt’) results in an overflow

但有些特殊时候。我们须要它溢出的时候怎么办呢?
Swift提供了,能够溢出的运算符: &-  这个先不细说。在最后的章节里,有讲溢出规则的时候再说吧

运算符+同一时候也支持字符串的连接。如:
“hello, “ + “kitty” 
//等同于 “hello, kitty”

求余数运算符(%)
9 % 4 的结果是1 
//有些语言里求余数运算,用的是mod
这里须要注意的是 假设是负数运算,比方
9 % -4  的结果依旧是1,想要得到正确的结果,非得写成:
-9 % 4 不可
当然,-9 % -4 与 -9 % 4的结果是一样的。执行符后面的符号是被忽略的

另外,在Swift中,浮点数也能够使用 % 来做求余数运算了,这是C和Objective-C里是不能够的
8 % 2.5  
//得到结果0.5

自增与自减运算符
跟C语言中的一样,好吧,又会涌现出一大批脑残面试官要用 a++和 ++a来折腾人了
反正在项目中,要是敢拿a++和 ++a来开玩笑写easy混淆代码的人。2话不说,直接开除就对了
(连代码是给人读的。不是给机器读的的道理都不明确。还写什么代码)

一元运算符
没啥能够说的…幼儿园小朋友都知道在 3前面加一个减号,他就是-3了…

复合运算符
又是和C里面一样
var a = 1
a += 2  
//a的值是3

比較运算符(返回Bool型)
推断等于  ==
推断不等于 !=
推断大于 >
推断小于 <
推断大于等于 >=
推断小于等于 <=
这些运算符不仅能够用于数值,也能够用于字符串的推断
除此之外。Swift还提供了两个新的比較运算符 === 和 !=== 用于推断两个引用是否指向了同一个对象,这个到类和结构体的章节会有样例

三目运算符(  ? : )
与C语言一样
question ?

answer1 : answer2

等效于
if question {
     answer1
} else {
     answer2
}

范围执行符(这样译我认为不合适,更应该叫自己主动扩展)
.. 与 …的差别
用数学的方法描写叙述就是:
a..b 等效于 [a, b)  
//不含b
a…b 等效于 [a, b]  
//含b
我认为这里又是个坑….好不easy把 = 和 ==的问题给干掉了,又来了个..和… 这两个的问题根源有差别吗?!

逻辑运算符
与(&&)
或(||)
非(!)   
//神经是不是有问题!!!! 在一个语言中。同一个符号在不同位置有两种意思!!! 究竟是几个意思!!! 看着吧,这里又是2B面试官发挥淫相的时机了

早晚会有人会写出类似这种代码:
let allowedEntry:Bool?

= false

if !allowedEntry! {…}  
// 前后都有叹号。究竟是几个意思!!!!再次吐槽一下

至于不给 a && b || c || d && e 加括号表示优先级的人。再次强烈建议开除



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115256.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • @JsonFormat、@JSONField、@DateTimeFormat的使用以及其区别[通俗易懂]

    三者出处1、JsonFormat来源于jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。2、JSONField来源于fastjson,是阿里巴巴…

    2022年4月17日
    53
  • eureka集群配置_hadoop高可用集群搭建

    eureka集群配置_hadoop高可用集群搭建Eruka高可用(集群)EurekaServer高可用配置(1)高可用是什么?“高可用性”(HighAvailability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性如:给EurekaServer搞一个备份(2)服务同步原理多个EurekaServer之间也会互相注册为服务,当服务提供者注册到EurekaServer集群中的某个节点时,该节点会把服务的信息同步给集群中的每个节点,从而实现数据同步。因此,无论客户端访问到EurekaServer集

    2022年8月21日
    7
  • cnpm安装和使用[通俗易懂]

    cnpm安装和使用[通俗易懂]在已经安装node.js基础上,利用npm来安装cnpm。cnpm是利用淘宝镜像来安装依赖包!优点:会比npm安装来的速度更快  操作:1、全局安装cnpm,打开cmd输入:npmi-gcnpm 2、验证是否安装成功,可以通过查看版本:cnpmversion当出现如下版本号,表示安装成功 …

    2022年10月10日
    3
  • java setdaemon_Java Thread setDaemon()方法

    java setdaemon_Java Thread setDaemon()方法Thread 类的 setDaemon 方法用于将线程标记为守护程序线程或用户线程 它的生命依赖于用户线程 即当所有用户线程都消亡时 JVM 会自动终止该线程 必须在线程启动之前调用它 如果在声明线程后调用 setDaemon 方法 则此方法将抛出 IllegalThrea 语法 publicfinalv booleanon 参数 on 如

    2025年6月13日
    3
  • Nginx的默认端口是_https默认端口

    Nginx的默认端口是_https默认端口我们前面一篇说了nginx的默认端口是80,可是空说无凭,我们用事实来说话。我们首先用whereisnginx.conf来看一下哪些目录里面有nginx.conf文件,我们看到了一共有6个目录,这里是应该分别到这六个文件里面去看一下,但是由于我们提前找过了,是/etc/nginx这个目录,所以我们就直接到该目录下面,即采用cd来切换目录,下图已经把这个文件标出来了。接着,我们查看…

    2025年10月8日
    3
  • java日志级别(一般业务处理日志用什么级别)

    https://www.cnblogs.com/lingduqianli/p/7589173.html

    2022年4月17日
    115

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号