2.5 Swift赋值运算符,溢出运算符, 空合并运算符 ??

来源:互联网 发布:java审批流程实现 编辑:程序博客网 时间:2024/05/03 21:54

        /**

         赋值运算符

         =    +=  %=  *=  /=

         本质上是对内存的写操作

         */

        

        let b =10

        var a =9

        var d:Int

        

        a = 6

        // c语言中可以这样子,但是swfit表达式 a = 6是没有值的

        // swift中禁止连续赋值

        //        d = a = 6

        

        print("a的值\(a)")

        print("a = 6表达式的值==\(a = 6)")

        

        // 加括号的连续赋值都不行的呀

//                 d = (a += 6)

        


        

        


        

        /**

         像这种就会报错的

         因为Swift的赋值操作并不返回任何值。

         这个特性防止程序员将 c == 6的判断误写成 c = 6,减少了常规的编码错误

         Use of '=' in a boolean context, did you mean '=='?

         */

//        if c = 6 {

//            print("lalla")

//        }

        

        

        

        /**

         溢出运算符  &+ &-  &*

         */

        var c =UInt8.min

        

        /**

         Arithmetic operation '0 - 1' (on type 'UInt8') results in an overflow

         */

//        c = c - 1

        c = c &- 1

        print("c==\(c)")

        /**

         c==255

         */

        

        

        /**

         Swift中可以对浮点数求余

         */

        

        /**

         '%' is unavailable: Use truncatingRemainder instead

         现在不可以直接这样写了

         let rem = 10 % 2.3

         */

        let rem =CGFloat(10).truncatingRemainder(dividingBy:2.3);

        print("rem==\(rem)")

        /**

         rem==0.800000000000001

         remainderA is '1.0'.

         remainderB is '2.1'.

         */

        

        

        var remainderA =CGFloat(3).truncatingRemainder(dividingBy:2);

        print("remainderA is '\(remainderA)'.")// 输出 remainderA is '1'

        

        var remainderB =CGFloat(5.2).truncatingRemainder(dividingBy:3.1)

        print("remainderB is '\(remainderB)'.")// 输出 remainderB is '2.1'

        

        

        

        

        

         /**

         空合并运算符  (a ?? b)将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b

         两个条件:表达式a必须是可选类型,默认值b的类型必须要和a存储值的类型一致

         

         Swift中有一个非常有用的操作符,可以用来快速的对 nil进行判断。

         ??

         这个操作符可以判断当左侧的值是 nil Optional值时返回其value

         左侧为nil时返回其右侧的值。比如

         */

        var level:Int?

        var startLevel =1

         

        var currentLevel = level ?? startLevel

        print("currentLevel==\(currentLevel)")

        

        let name:String? = "老王"

        let name1:String? = nil

        

        // ?? 运算符的优先级低于 +号,注意使用的时候加上括号啊

        print(name ??"" +"你好")

        print(name1 ??"" +"你好")


        

        

        addNumber(x:3, y: nil)

        


    func addNumber(x:Int?, y: Int?) ->Void {

        

        // 1.强制解包有风险

//        print(x! + y!)

        

        

        // 2.使用 if判断,但是如果直接使用if,参数很多的时候,会使代码很丑

        if x !=nil && y != nil {

            print(x! + y!)

        } else {

            print("x 或者 ynil")

        }

        

        // 使用运算符 ??

        print((x ?? 0) + (y ??0))

    }

    




0 0
原创粉丝点击