zoukankan      html  css  js  c++  java
  • 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.github.com"  //  "http://www.github.com"

    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)断言的使用注意

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

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

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

  • 相关阅读:
    docker in docker
    docker社区的geodata/gdal镜像dockerfile分析
    howto:在构建基于debian的docker基础镜像时,更换国内包源
    使用Visual Studio 2017构建.Net Core的Docker镜像
    步骤:asp.net core中使用identifyserver4颁发令牌
    部署:阿里云ECS部署Docker CE
    问题:调用 ASP.Net Core WebAPI的HTTP POST方法时,从 [FromBody] 中读取的 MongoDB GeoJsonObjectModel成员总是null
    《.NET 微服务:适用于容器化 .NET 应用的体系结构》关键结论
    SQL数据库注入防范 ASP.NET Globle警告
    数据库中的恶意字符批处理
  • 原文地址:https://www.cnblogs.com/zengshuilin/p/5766659.html
Copyright © 2011-2022 走看看