zoukankan      html  css  js  c++  java
  • swift 可选类型笔记

           晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧。广州下雨,真特么的冷。。好了,废话不说了,说正题说说Swift可选类型

    先定义一个变量:

     var string="zhangxu"  

    想想这个变量要强转成 Int 类型的会怎样?

    // var Zint: int  = string.toint()  这样子肯定是不行的,没发转换成 Int 类型的,那有没有想过 Zint 的值会是什么呢?  这时候我们今天的主角,可选类型就登场了!

    var Zint : int? = string.toint()

    这句代码就描述的是可选类型, 所以 Zint 的类型不是 int 类型的,切记!它是 int?(可选类型)

    那这个Zint的值会是什么呢,int?与int 的不同点我们知道了,也就明白了!

    int? 可选类型,它能接受到的值得类型有两种。int 型 与 nil 值,这里的  nil 中的 nil 完全不是同一个概念,待会我们阐述!

    int 型却只能接受 int 型的值,不能接受 nil 值!

    所以,上面那个问题的答案我们也就知道了,Zint 的 值 是nil  ,因为上面的强转是不会成立的。 而 Zint 的类型确实是 int? 类型,它能接受nil 值,所以它的值是 nil

    这就是第一点,可选类型! 

    有了可选类型,也就随之强制解析了(最重要的一点,只有可选类型,才能解析!!!) 接着以前面的Zint为例:

    我再定义一个变量

    //   var ZX:int = Zint  这里会编译错误的。原因就是Zint的值为nil ,前面说了int 不接受nil值
    

    看下面的代码:

    var ZX:String?=@"123456789"
    
    //  var Z:String = ZX  这里错误的原因是他们的类型不一样,大家琢磨一下!
    

      

    但我这样写

    var Z:String = ZX!

    这样写是没有问题的,但还是不严谨!这里的ZX!就是做了解析的处理,他就是为了获取 ZX 这个变量确实存在的值!没有值是解析失败,在运行的时候报错的,所以说这里写的不严谨,我们严谨一点因该这样子写

    if ZX != nil{
     var Z:String = ZX!
    }
    

      

    最后一点了,说说隐式可选类型 ,先说一点,前面我们说的在类型后面加 ? 的其实就是显式的。

    看下面: 

    var ZX : String!="12345678"
    
    var Z: String = ZX 
    

      

    首先说明这样子写是没有问题的! 在后面加 !号,就是我们说的隐式可选类型,其特点大家知道了,也就不难理解为什么那样子写是可以的,因为加了 ! 之后Swift会自己进行隐式的解析!就这么简单的一句话,它自己解析了!!既然解析了,就可以直接赋值给变量 Z 了,也就不觉得奇怪了,因为我们知道可选类型要赋值给不可选的类型的时候必须必须要进行解析!!!

    就这样子先,明天还要上班,睡觉吧,十二点半了。。明天加油!晚安张小旭!

  • 相关阅读:
    U盘安装CentOS 7系统
    生产库中遇到mysql的子查询
    mysql 储存类型自增主键区别
    MySQL主从数据库同步延迟问题解决
    MySQL 加锁处理分析
    120篇精华文章打包送,干货慎入!
    mysql批量删除相同前缀的表和修改表名
    用pt-online-schema-change给大表在线加字段的时候导致从库数据丢失的问题
    【MySQL】online ddl 工具之pt-online-schema-change
    互联网公司为啥不使用mysql分区表?
  • 原文地址:https://www.cnblogs.com/zhangxiaoxu/p/5147039.html
Copyright © 2011-2022 走看看