Swift初识-2

四、运算符
       1、赋值运算符
同 C 的部分运算符(如 三目运算符 ?:) 
        范围运算符:   . . <   、 . . .
        溢出运算符:   &+ &- 、&* 、&/ 、&%
赋值: 1对1赋值 、   N对N赋值 let (x, y) = (1, 2)    //  元组
           与C、OC不一样, Swift的赋值运算符没有返回值

if (x = y) {    // 代码错误,因为 x = y 没有返回具体的值,好处:这样防止误用=/==

 
       2、求余运算符% 求余运算符,也有语言称模运算符

  -9 % 4   //  -1       -9 % -4  //  -1    求余结果的正负跟%左边数值的正负一样

同C不一样:Swift的 % 支持浮点数的计算     8 % 2.5  //  0.5
 
       3、Bool类型:也称逻辑类型(Logical)
取值   true:真、 false:假    (C中:0为假、非0为真,与Swift不同)
if语句的条件值必须为Bool类型: if (12)  // 错误写法,括号内返回值必须Bool类型
比较运算符、逻辑运算符返回值是Bool类型:true/false
        三目条件运算符的条件必须是Bool类型
 
       4、范围运算符用来表示一个范围
闭合范围运算符:    a ... b,      表示[a,b]包含 a 和 b
半闭合范围运算符:a ..< b,    表示[a,b)包含 a,不包含 b

    for i in 0..<5 {

        print(i)   // 0、1、2、3、4  

    } 

 

       5、溢出运算符每种数据类型都有自己的取值范围,一旦赋值超出范围会产生编译或运行时错误 
         let x = Int8.max; let y = x + 1    // y的类型为Int8,超出取值范围,出错
Swift为整形计算提供了5个&开头的溢出运算符,能对超出取值范围的数值进行灵活处理

     let y = x &+ 1    // 上溢出:y的类型为Int8,y=-128

除零溢出:   let y = x &/ 0   //  或:&%   y=0  
 
五、元组类型:元组类型由 N个 任意类型的数据组成,组成元组类型的数据称为“元素”(N>=0)

    var position = (m : 10, n : 20)  // position有两个元素 m、n是元素名称

    let person = (name : "jack")   //只有name一个元素        let data = ()  // 空的元组

元素的访问:用元素的名称:let value = position.m   // 取值     position.n = 60  // 设值
                      用元素的位置:let value = position.0   // 取值       position.1 = 60  // 设值
       ⚠️如果用 let 来定义一个元组,那么就是常量,就无法修改他的元素。注意m、n的类型,否则设值时会出错
元组的输出:可以输出整个元组来查看所有元素的值
使用细节:可以省略元素名称               let position = (12, "jack")
                  可以明确指定元素的类型    var person: (Int, String) = (12, "jack”)   // 第0个元素只能Int类型,第1个元素只能String类型
⚠️在明确指定元素类型的情况下不能加上元素名称:var person = (age:12, name:"jack”)
                   可以用多个变量接收元组数据    var (x, y) = (12, 15)    var point = (x, y)
                     可以将元素分别赋值给多个变量 var point = (12, 15)   var (x, y) = point
                   可以使用下划线_,来忽略某个元素的值,取出其他元素的值

     var (_, name) = posit   // 只有 name = "jack"

 
六、流程控制
       1、for-in
流程结构:Swift支持流程结构,循环结构:for、for-in、while、do-while
        选择结构:if、switch
⚠️这些语句后面一定要跟上大括号{ }
for-in 和 范围运算符

    for i in 1...3 {

        print(i)

    }  // 按顺序从范围中取值赋值给i,每去一次值,就执行一次循环体,范围的长度就是循环体的执行次数

       如果不需要用到范围中的值,可以使用下划线_ 进行忽略 :  for _ in 1...3  // 不使用i
 
       2、Switch:
2.1、基本使用

   let grade = “A”           switch在C中的区别:

     switch grade {        在C中,case的结尾没有break,接着就会执行下一个case

        case "A”:          在Swift中,不需要在每个case后面增加break, 

           print(1)                  执行完case对应的代码后,默认会自动退出switch语句

        default:         

           print(0)     

 

     }                  

2.2、使用注意:在switch中,每一个case后面必须有可执行的语句
2.3、多条件匹配和范围匹配
         一个case后面可以添加多个匹配条件,条件之间用逗号隔开:case "A","D”:
         case后面可以填写一个范围作为匹配条件:case 80…100:
                ⚠️switch要保证处理所有可能的情况,不然直接报错,因此、这里的default一定要加,不然会出现一些处理不到的情况
2.4、匹配元组:case还可用来匹配元组

    let point = (1, 1)

       switch point {              

    case (0, 0):

        print("点在原点")

    case (_, 0):                       //  _ 的作用:1、能匹配任何值

        print("点在x轴上")              //           2、忽略对应位置元组元素

    case (-2...2, -2...2):             //   case (0, _):   点在y轴上

        print("这个点在矩形框内")

    default:

        break

    }

2.5、数值绑定:case匹配的同时,可以将switch中的值绑定给一个特定的常量或变量,以便在case后面的语句中使用

     let point = (10, 0)

     switch point {

     case (let x, 0):

         print("这个点在x轴上,\(x)")

     case (0, let y):

         print("这个点在y轴上,\(y)")

     case let (x, y):

         print("这个点在x轴位置\(x),点在y轴位置\(y)")

     }    //  这个点在 x 轴上,值为 10

2.6、where:switch语句可以使用where来增加判断条件

     var point = (10, 10)  //  判断一个点是否在紫线&绿线上

     switch point {

     case let (x, y) where x == y :

         print("在绿线上")

     case let (x, y) where x == -y :

         print("在紫线上")

     default :

         print("不在线上")

     }  //  在绿线上

2.7、fallthrough:作用-执行完当前case后,会接着执行fallthrough后面的casedefault的语句

     let num = 20              //  ⚠️:fallthrough后面的case条件不能定义变量和常量

     var str = "\(num)是个"

     switch num {

     case 0...50 :

         str += "0 到 50之间"

         fallthrough    //  继续执行default的语句,类似C中去break的

     default :

         str += "的数"

     }   //  20是个0 到 50之间的数

 
       3、标签
使用标签的其中一个作用:可以用于明确指定要退出哪个循环体

    Group: for _ in 1...3 {     // 添加🏷️:Group

        for item in 1...5 {

            print("hard working")

            if item == 3 {   // 运行3次,跳出

                break Group

            }

        }

        print("have rest")

    }

posted @ 2016-08-20 23:40  Miracle_H  阅读(192)  评论(0编辑  收藏  举报