zoukankan      html  css  js  c++  java
  • [Swift A]-问号&感叹号

    1.必须赋值的变量,或普通变量

    var month:Int
    println("month:(month)")
    

     上面这2句代码会提示报错,因为没有赋值

    2.再看看如下写法

    var month:Int?
    println("month:(month)")
    

     打印的值为:month:nil 

     即java里面的null

    3.再看看这个代码

    var month:Int!
    println("month:(month)")
    

     输出的和2一样

    4.总结1

    问号和感叹号都可以标识变量为可选变量或可空变量

    5.问号和感叹号的区别

    var year:Int = 2014;
    
    var month:Int?
    println("month:(month)")
    
    year = month
    

     输出:month:nil

              fatal error: Can't unwrap Optional.None

    .....

    var year:Int = 2014;
    
    var month:Int? = 12;
    println("month:(month)")
    
    year = month!
    

     上面这个代码就可以正常运行

    如果把感叹号换成问号就会提示错误

    6.总结2

    !可取可选变量的非空值,?就不可以这样

    7.可选变量可以当条件来使用(非空为真,空为假),而普通变量不行

    var a:Int?
    if a {
        println("1");
    } else {
        println("2");
    }
    

     8.可选变量的类型转换

    代码1:

    var a:String? = "22"
    println("a:(a?.toInt())");
    

     代码2:

    var a:String?
    println("a:(a!.toInt())");
    

     代码3:

    var a:String?
    println("a:(a?.toInt())");
    

     解释:?有点类似java里面的 a == false ? "false" :"true" 。 代码1能正常运行,代码2是强制拿a的值去转换,而代码3里就不会了,而是判断下为不为空,如果为空就不执行转换。

    有人直接把?表示为判断解析,!表示为强制解析

  • 相关阅读:
    JavaScript
    关于setInterval()你所不知道的地方
    JavaScript面向对象和原型函数
    GET和POST有什么区别?及为什么网上的多数答案都是错的
    10个最常见的 HTML5 面试题及答案
    Ajax我选择这样入门
    前端应当了解的Web缓存知识
    JavaScript
    Linux rhel7 下MySQL5.7.18详细安装文档
    思科交换机配置DHCP的四个方面
  • 原文地址:https://www.cnblogs.com/royi123/p/3834909.html
Copyright © 2011-2022 走看看