设为首页 加入收藏

TOP

窥探Swift之需要注意的基本运算符和高级运算符(一)
2017-10-10 12:18:45 】 浏览:2468
Tags:窥探 Swift 需要 注意 基本 运算 符和 高级

  之前更新了一段时间有关Swift语言的博客,连续更新了有6、7篇的样子。期间间更新了一些iOS开发中SQLite、CollectionViewController以及ReactiveCocoa的一些东西。时隔两月,还得继续更新Swift语言的东西不是。在去年翻译《Swift编程入门经典》(Swift1.0版本,基于Xcode6)这本书时,系统的搞了搞Swift语言,接下来的一段时间内打算持续更新一下相关Swift语言的一些东西, 不过现在已经是Swift2.0版本了,区别还是不小的。并且目前在工作中正重构着整个项目的代码,之后根据一些项目实例再更新一些关于代码重构的博客与大家交流一下,然后再整理一些Android开发的一些东西吧,当然是类比着iOS开发了。

  废话少说,开始今天博客的主题。有些小伙伴看到今天的博客Title可能会笑到,基本运算符有什么好说的,只要会编程的,都会使用基本运算符。此话不假,但是今天博客的主题不是介绍++i还有i++的区别的。今天博客中介绍那些在Swift中比较独特的基本运算符,这些运算符会让你眼前一亮(有些是在OC语法中渴望使用到的)。不积跬步无以至千里,不积小流无以成江海。虽然需要进阶,但是基础还是蛮重要。今天博客前半部分是需要注意的基础运算符,有基础运算符当然就有高级运算符,接着会介绍一些高级运算符。今天就窥探一下Swift2.0的东西(基于Xcode7.1)

一. 需注意的基础运算符

  1. 赋值运算符(=)

    在Objective-C,C等一些语言中允许你在表达式中使用=号, 如下所示。 testNumber = 20会返回一个bool类型的值YES。 testNumber = 20在表达式中是永真的。所以下方的代码会打印Log中的内容。

1     NSInteger testNumber = 10;
2     if ((testNumber = 20)) {
3         NSLog(@"testNumber = %ld", testNumber);
4     }

    在Swift中是不允许这样做的,从这一点也能看出Swift语言的安全性。如果你在Swift写了上面的代码,就会报出下面的错误。IDE就会提示你,问你是不是应该使用==预算符。

 

 

 

  2.类型安全性,不允许隐式类型转换

    这一点也是Swift语言的一个优势,在Swift语言中是不允许你使用隐式类型转换的。即便是Double类型和Float类型进行隐式类型转换也是不可以的。而在Objective-C中是可以进行隐式类型转换的。看下方实例:

    在Objective-C中你可以这样做, 下方代码是可以编译通过的。两种类型(Float32, Float64)不同的数据进行相加,然后再把结果隐式转换成另一种类型(NSInteger)。

1     Float32 floatNumber1 = 10.0f;
2     Float64 floatNumber2 = 20.0f;
3     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..<b 表示a到b这个区间的值,不包括b。其用法如下:

    下方代码使用的是闭区间运算符1...10, 会循环10次

      

    如果改成半开区间,那么就是循环9次

 

 

 

二. Swift中的高级运算符

  1.Swift中的位运算

    如果你在大学课程中学过数字电路这门课程的话,想必不会对位运算陌生的。在好多编程语言中也都有位运算。位运算应用得当可以提高算法的效率,在一些高效的算法中有时会用到位运算,再此就不做过多的讨论了。接下来将会搞一搞Swift中的按位与,按位或,按位异或以及按位取反等操作。

    (1) 按位与(&)

    对二进制中的每一位进行与操作,所以叫按位与。运算规则为1 & 1 = 1,  1 & 0 = 0, 0 & 1 = 0, 0 & 0 = 0。按位与简单的用法就是保留二进制中的指定位数,或者对数值进行清零操作。下方是按位与操作的小实例:0000_1111与1000_1011进行按位与运算,就是保留1000_1011的后四位。如果要对指定的二进制数进行清零的话,只需要把该值和0000_0000进行按位与操作即可。

    下方是上述代码中按位与的原理图:

 

    (2)按位或(|)

    顾名思义,按

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Swift网络开发之NSURLSession学习.. 下一篇用Swift重写公司OC项目(Day2--swi..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目