Swift中比较独特的基本运算符
一。 需注意的基础运算符
1. 赋值运算符(=)
在Objective-C,C等一些语言中允许你在表达式中使用=号, 如下所示。 testNumber = 20会返回一个bool类型的值YES。 testNumber = 20在表达式中是永真的。所以下方的代码会打印Log中的内容。
NSInteger testNumber = 10;
if((testNumber = 20)) {
NSLog(@“testNumber = %ld”, testNumber);
}
在Swift中是不允许这样做的,从这一点也能看出Swift语言的安全性。如果你在Swift写了上面的代码,就会报出下面的错误。IDE就会提示你,问你是不是应该使用==预算符。
2.类型安全性,不允许隐式类型转换
这一点也是Swift语言的一个优势,在Swift语言中是不允许你使用隐式类型转换的。即便是Double类型和Float类型进行隐式类型转换也是不可以的。而在Objective-C中是可以进行隐式类型转换的。看下方实例:
在Objective-C中你可以这样做, 下方代码是可以编译通过的。两种类型(Float32, Float64)不同的数据进行相加,然后再把结果隐式转换成另一种类型(NSInteger)。
Float32 floatNumber1 = 10.0f;
Float64 floatNumber2 = 20.0f;
NSInteger result = floatNumber1 + floatNumber2;
上面的代码在Swift中如下,IDE会报一个错误,如下所示。错误的大致意思就是你不能把Float32类型的数据与Float64类型的数据进行相加。其本质原因是在Swift语言中是不允许你进行隐式类型
在Swift中对上述代码进行类型显示转换,编译就会通过。在Playground中就会显示相应的结果值。
3.取模运算(%)的特殊性
还是以Objective-C做类比,在Objective-C中取模运算(%)只支持整型,如果在取模运算中你使用了浮点类型,那么就会报出如下错误。大概意思就是取模运算不支持浮点类型,请转换成NSInteger类型。
而Swift中的取模运算就支持浮点类型,上面的语句在Swift中就不会报错,下方是上述事例在Playground中的结果值:
4. nil聚合(合并,连接)运算符(??)
该运算符可谓是Swift中添加的新特性,??运算符在Objective-C中是没有的。但是??不是Swift的原创,在C#中也是有??运算符的,而且用法和Swift中??用法类似。都是用来处理nil值的运算符,通过一个实例来进行介绍,一目了然。
在实例中我们先定义一个可选类型的字符串变量developLanguage,来记录开发语言, 再定义一个选择开发语言的字符串变量selectLanguage。如果developLanguage的值为nil的话,默认选择的语言是“Swift”。 如果developLanguage的值不为nil, 就强制打开可选类型的值,把该值赋值给字符串变量selectLanguage。具体代码如下所示:
接下来就是预算符??出厂的时候了,一个??的功能就是上面代码中if -- else的功能。也就是说上面的if -- else 语句可以使用下方的??运算符来代替。下面要注意一点的是在??运算符中使用可选类型变量时没有使用!强制打开可选类型的值, 因为在??运算符中能确保使用的可选类型变量中有值,如果没有值就不打开使用,所以就可以把!省略掉。
5.比较运算符支持字符串
在Objective-C中你可以使用比较运算符来比较运算符,这样做编译器是不会报错的,但是你不会得到你想要的结果。如果你直接用比较运算符来比较字符串的话实质上是比较的字符串的内存地址,请看下方Objective-C的代码。有下方的输出结果不难看出比较的是字符串的内存地址。
在Swift中你可以使用比较运算符来比较字符串,如下所示:
6.区间运算符
区间运算符可以表示两个值之间的范围。。。. 是闭区间运算符,比如a.。.b表示a到b这个区间并且包括a和b的值。 。。《是半开区间, 比如a.。
下方代码使用的是闭区间运算符1.。.10, 会循环10次
如果改成半开区间,那么就是循环9次
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
下载地址
Swift中比较独特的基本运算符下载
相关电子资料下载
- 拿下国家级信创认证!中科驭数KPU SWIFT-2200N成为国内首款满足金融业严苛要求的 163
- 中科驭数基于DPU的思威SWIFT系列智能网卡与统信软件产品完成适配 176
- 如何使用Swift提高代码质量 126
- 积木易搭Magic Swift Plus为雕刻工艺品精雕复刻提供三维数字化解决方案 274
- 词法分析-Antlr-1 235
- Kotlin 1.8.0发布,改进性能和Swift的互操作性 1044
- Swift 2023:强调并发、泛型和C++互操作性,开发Swift解析器 300
- 彩色套件创建全彩3D模型MagicSwiftPlus仅千元级 432
- Swift的使用体验与生态发展之路 981
- 如何加速apply函数600倍的技巧 627