你的位置:首页 > 操作系统

[操作系统]Swift的基本运算符


  今天学习了Swift语言的最基本的知识,以下是本人的一些认识与小结,希望能帮助更多人的区理解,如有不妥的地方望大家指出,以便及时更正。

  

  基本运算符

  运算符是一种特殊的符号或短语,你可以用它来检查,改变,或组合值。

  运算符都是一元,二元或者三元:

  • 一元运算符操作单个对象主要有:前缀操作符 (如 -a,!a)和后缀操作符在对象后出现 (如 i++,i--)。
  • 二元运算符操作两个对象且在两对象之间,主要有:-,+,*,/,%,<,>,=。(如 a-b, a+b, a*b, a/b, a%b, a<b, a>b, a=b)
  • 三元运算符对两个对象进行操作,与C语言一样,Swift也只支持一个三元运算符:三元条件操作符 (a ? b : c).

  赋值运算符

  赋值运算符 (a=b) 用 b 的值去初始化或更新a的值

 let b =2 var a = 3 a= b //此时a的值等于b的值都是2

 

  假如右边赋值的数据为多个数据的元组,它的元素可以是一次性赋给的多个常量或变量 

let (a, b) = (1, 2)// a等于1, b等于2

  与C及Objective-C不同,Swift中赋值运算符并不将自身作为一个值进行返回。所以以下的代码是不合法的:

if x = y {// 错误, 因为x = y并不会返回一个值}

 数学运算符

  Swift支持所有数字类型的四个标注运算符:

  • 加法(+)
  • 减法(-)
  • 乘法(*)
  • 除法(/)

  例如:

1 + 2 // equals 35 - 3 // equals 22 * 3 // equals 610.0 / 2.5 // equals 4.0

 

  不同于C和Objective-C,默认情况下Swift的算术运算符不允许值溢出。加法运算符对字符串连接也一样适用,例如:

"hello, " + "world" // equals "hello, world"

 

  两个字符,或者一个字符一个字符串,能组合成一个新的字符串:

let dog: Character = "dog"let cow: Character = "cow"let dogCow = dog + cow// dogCow is equal to "dogcow"

  取余运算符

  取余运算符%是指在除数除以被除数时余下的数,如(3%2的余数就是1)

let a = 5let b = 3let c = a%b//这时c的值是2

  同一个方法中如果a的值是-5那么取余运算后c的值就是-2,如果b的值是-3则c的值会是2,也就是说取余运算的符号不受被除数b的影响,只受除数a的影响

  浮点余数计算

  不同于C与OC的是Swift的取余运算同样可以运用于浮点数:

let a = 8let b = 2.5let c = a%b//那么现在的c的值是0.5

  自增自减运算符

  和C一样Swift提供了自增(++),自减(--)两个运算符,其增减量为1,可以对任何的整点或浮点类型的变量使用。如

var a = 0++a  //这时a的值是1--a   //这时a的值是0

  这里需要注意的是当运算需要返回值的时候,自增自减运算符所放的位置的不同对运算的结果也是不一样的:

var a = 0let b = ++a   //a和b的值都为1let c = a++   //这时a的值是2 c的值是1let d = --a    //这时d的值是1 a的值也是1let e = a--    //这时e的值是1 a的值是0

 

  复合赋值操作符

  Swift提供了和C语言一样的复合复制操作符,就是说把赋值和另外一种运算符结合起来。如(+=),(-=):

var a = 1a += 2   //这时a的值为3 a -= 3   //这时a的值为0

 

  加法赋值操作符的原型是  a = a + 2,之所以写成(+=)是因为这样写能够有效地把加法和赋值组合到一个运算,同时执行这两个任务。

  需要注意的是:复合复制操作符不返回值。例如这样写就是不对的    let a = +=1。

  

  比较运算符

  Swift支持所有C的比较运算符。

  • 大于(a>b)
  • 小于 (a<b)
  • 大于等于 (a >= b)
  • 小于等于 (a <= b)
  • 等于  (a = b)
  • 不等于 (a != b)
    let a = 5let b = 6let c = 5a>b    //返回false  c<b    //返回truea>=c   //返回true  a<=c   //返回truea == c  //返回truea != b  //返回true

    这种比较运算符通常都用在条件语句中,比如if语句 

    let a = "chk"if a == "chk"{  println("hello, chk")  } else{  println("not chk") }//输出的结果是 hello, chk

     

    关于if语句我们以后再详细研究

     

  范围运算符

  Swift提供了两种形式的范围运算符

  1、封闭范围运算符

    封闭范围运算符(a...b)定义了一个范围,从a到b,并包括了a和b的值。一般用于for -in 循环语句中

for i in 0...5{  println("第 \(i) 次")}//第 0 次//第 1 次//第 2 次//第 3 次//第 4 次

 

 

 

   关于for -in语句我们以后再深入研究。  

  2、半封闭的区域运算符

          半封闭的区域运算符(a..b)定义了从a到b的范围,但不包括b。它被认为是半封闭的,因为它包含第一个值,而不包含最终值。

    半封闭的范围使用明确,当你使用从零开始的列表,如数组,它是有用的数到(但不包括)列表的长度:

let names = ["Anna", "Alex", "Brian", "Jack"]let count = names.countfor i in 0..count {println("Person \(i + 1) is called \(names[i])")}// Person 1 is called Anna// Person 2 is called Alex// Person 3 is called Brian// Person 4 is called Jack

  请注意,该数组包含四个项目,但0 . .数只数到3(数组中的最后一个项目的索引),因为它是一个半封闭的范围。有关数组的信息,我们以后深入研究。

  三元运算符

  Swift跟C语言一样也支持三元运算,三元运算也属于条运算,主要形式是 a?b:c 其表达的意思是判断a的值,若a的值返回true则表达式返回b的值,若a的值返回false则返回c的值。下面我们用代码比较下三元运算符的优势:

let a = truelet b = a?2:3//这时b的值是2

 

  上边的表达式也可以这样写

let a = trueif a {  reture 2}else{  reture 3}//结果是2

  很明显使用三元运算符更简洁,更方便。不过需要注意的是为了保证代码的可读性,最好不要使用多个实例的三元条件运算符组合成一个复合语句。

 

  逻辑与运算符

  Swift支持这三个标准逻辑运算符基于C语言,通常用在条件语句中:

  • not (!a)
  • and (a&&b)
  • or  (a || b)

  逻辑非运算符(!a)表达的意思为不是什么成立则返回true,不成立则返回false

let a = trueif !a {  println("条件成立")}else{  println("条件不成立")}//输出结果是 条件不成立//因为a本身是正确地,而逻辑非运算符说a不是正确地,所以不成立返回false

 

 

 

 

  逻辑与运算符(A&&B)表达的意思为A,B两个值都必须是true才返回true,否则A,B中有一个是false就返回false

let A = truelet B = falseif A && B {  println("条件成立返回true")}else{  println("条件不成立返回false")}//输出结果是 条件不成立返回false

 

  逻辑或运算符(A || B)表示A和B其中有一个是true则返回true,如果A,B都是false则结果返回false

let A = truelet B = falseif A || B {  println("条件成立返回true")}else{  println("条件不成立返回false")}//打印结果是  条件成立返回true

  在这里值得一提的是不管是逻辑与运算符还是逻辑或运算符都用到了短路条件判断法,比如说逻辑与运算符(&&)必需是两个值都为true时才成立,那么当左边的值是false的时候,条件不成立,就不需要再判断运算符右边的值了。逻辑或运算符(||)也是同样的道理,逻辑或运算符(||)是只要有一个值是true就成立,那么当判断左边的值是true时,则条件是成立的,就不用再判断运算符右边的值了。

  复合逻辑表达式

  符合逻辑表达式是将多个逻辑运算符复合后创建更长的复合表达式:

let a = truelet b = falselet c = trueif !a || c && b {  println("条件成立")}else {  println("条件不成立")}//输出结果是条件不成立

 

  像这种复合逻辑表达式的判读一般都是从左到右根据逻辑运算符的优先级依次进行判断,(!,&&,||)这三个运算符的优先级是一样的,只需要牢记逻辑与运算符(&&)两者都必须是true才成立,逻辑或运算符(||)两者有一个是true则成立,如此即可正确解析整个复合表达式,一定要透过现象看本质。

 

  明确地括号

  这个就比较好理解了,在复合逻辑表达式中我们可以添加()使逻辑意图更加明确,比如在上段代码中我们加入()

let a = truelet b = falselet c = trueif !a || ( c && b ) {  println("条件成立")}else {  println("条件不成立")}//输出结果是条件不成立

 

  在符合逻辑表达式中我们可以把几个值放在一个单独的逻辑运算中去判断出结果,然后根据()内判断的结果再与前面或后面的值进行判断,最后得出最终结果