zoukankan      html  css  js  c++  java
  • iOS开发Swift篇—(四)运算符

     

    iOS开发Swift篇—(四)运算符

    一、运算符

    1.Swift所支持的部分运算符有以下一些

    赋值运算符:=

    复合赋值运算符:+=、-=

    算术运算符:+、-、*、/

    求余运算符:%

    自增、自减运算符:++、--

    比较运算符:==、!=、>、<、>=、<=

    逻辑运算符:&&、||、!

    三目运算符:? :

    范围运算符:..< 、...

    溢出运算符:&+、&-、&*、&/、&%

     

    2.赋值运算符

    (1)1对1赋值

    var a = 5

    let b = 20

     

    (2)N对N赋值(元组)

    let (x, y) = (1, 2)   // x的值是1,y的值是2,并且都是常量

     

    注意:跟COC不一样的是:Swift的赋值运算符没有返回值

    if (x = y) {  }

    // 上面的代码是错误的,因为x = y并没有返回具体的值

     

    说明:这样的好处是防止误用 = 和 ==

     

    3.算术运算符

    简单使用

    1 + 2       // 3

    5 - 3       // 2

    2 * 3       //  6

    10.0 / 2.5  // 4.0

    "http://" + "www.wendingding.cn"  //  "http://www.wendingding.cn"

     

    4.求余运算符

    %在Swift中叫“求余运算符”,也有语言叫做“模运算符”

    9 % 4 // 1

    -9 % 4 // -1

    9 % -4 // 1

    -9 % -4 // -1

    提示:求余结果的正负跟%左边数值的正负一样

     

    注意:跟C语言不一样的是,Swift的%支持浮点数的计算

    8 % 2.5  // 0.5

     

    5.Bool类型

    Bool类型,也被称为逻辑类型(Logical),就2种取值

    true:真

    false:假

     

    注意:在C语言中:0是假,非0就是真;而在Swift中没有这种概念

    if语句的条件必须是Bool类型的值

    (1)错误写法

    if (10) {

        println("条件成立")

    }

     

    (2)正确写法

    if (true) {

        println("条件成立")

    }

     

    6.三目运算符

    比较运算符逻辑运算符会返回Bool类型的值,取值有2种可能

    true:真,6 > 5,(7 > 6) && (9 != 7)

    false:假,6 < 5,(7 >= 6) && (9 == 7)

     

    三目运算符的条件必须是Bool类型的值

    (1)错误写法

    let a = 10

    let c = a ? 100 : 200

     

    (2)正确写法

    let c = a != 0 ? 100 : 200

    let c = false ? 100 : 200

     

    7.范围运算符

    范围运算符用来表示一个范围,有2种类型的范围运算符

    闭合范围运算符:a...b,表示[a, b],包含a和b

    半闭合范围运算符:a..<b,表示[a, b),包含a,不包含b

     

    举例:

    // index的值从1~5

     

    // index的值从1~4

     

    8.溢出运算符

    (1)简单说明

    每种数据类型都有自己的取值范围,默认情况下,一旦赋了一个超出取值范围的数值,会产生编译或者运行时错误

    注意:下面的写法是错误的

    let x = UInt8.max

    let y = x + 1

    第2行代码会在运行时报错(运行时错误)

       

    提示:上面是运行时错误,下面的错误提示是编译时错误。

      

    Swfit为整型计算提供了5个&开头的溢出运算符,能对超出取值范围的数值进行灵活处理

    溢出加法 &+

    溢出减法 &-

    溢出乘法 &*

    溢出除法 &/

    溢出求余 &%

    (2)值的上溢

    let x = UInt8.max

    let y = x &+ 1

    第1行代码过后:x的值是 255(最大值)

    第2行代码过后:y的值是 0(最小值)

    (3)值的下溢

    let x = UInt8.min

    let y = x &- 1

    第1行代码过后:x的值是 0(最小值)

    第2行代码过后:y的值是 255(最大值)

      

    有符号整数也有类似的溢出现象

    let x = Int8.min

    let y = x &- 1

    第1行代码过后:x的值是 -128(最小值)

    第2行代码过后:y的值是 127(最大值)

      

    (4)除零溢出

    默认情况下,一个数除于0,或者对0求余数,编译器会直接报错

    let x = 10

    let y = x / 0

    let z = x % 0

    第2、3行代码:编译器都会报错

     

    如果使用溢出运算符,就不会报错

    let x = 10

    let y = x &/ 0

    let z = x &% 0

    y和z的值最终都是0

     

    二、断言

    1.简单说明

    断言是一种实时检测条件是否为true的方法

    如果条件为true,那么代码继续执行

    如果条件为false,就抛出错误信息,直接终止程序的运行

     

    2.断言的用法

    使用全局的assert函数

    assert函数接收一个Bool表达式和一个断言失败时显示的消息

    assert(index >= 0, "index必须大于0")

    如果index大于等于0,就继续执行后面的代码

    如果index小于0,就抛出错误信息(下面的黑色字),直接终止程序的运行

    assertion failed: index必须大于0

     

    assert(index >= 0)

    可以省略错误信息,但不推荐,这样不利于调试

     

    3.使用场景和注意

    (1)下面的场景,可能用到断言

    检测数组的索引:不能太小或者太大,否则造成数组越界

    检测传递给函数的参数:如果是无效参数,将不能在该函数中使用

     

    (2)断言的使用注意

    断言会导致程序运行的中止,如果不管条件是否成立,都要继续往下执行代码,那就不能用断言

    断言可以保证错误在开发过程中会被及时发现,但发布的应用里最好不要使用

    如果一个程序用着用着就突然崩溃闪退,会严重影响用户体验

     

     
     
  • 相关阅读:
    容器跨主机网络通信学习笔记(以Flannel为例)
    Kubernetes控制器Job和CronJob
    记一次使用Flannel插件排错历程
    Kubernetes控制器Deployment
    Kubernetes如何通过StatefulSet支持有状态应用?
    react18 来了,我 get 到...
    gojs 实用高级用法
    vuecli3 vue2 保留 webpack 支持 vite 成功实践
    calibre 报错 This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 解决
    unable to recognize "*.yaml": no matches for kind "RoleBinding" in version "rbac.authorization.k8s.io/v1beta1"
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5580305.html
Copyright © 2011-2022 走看看