zoukankan      html  css  js  c++  java
  • swift中为什么要创造出可选型?

    (1)因为nil这个东西,swift中没有就是没有。  Int?整型可选型,如果不提前声明,直接赋值变量 nil会报错 。
    可以将Int赋值给Int?   ,但是不能将Int?赋值给Int 。

    (2)不能将 普通 String 和可选型直接一起混用,必须 Unwrap 。也就是这样 在某个可选型变量后面加个!
    表示担保它一定不为nil  。这个 叫 强制解包 , 是有风险的。

     (3)swift提供了一种语法用来解包 ,let 也可以用var
     if let errorCode = errorCode {
        仅在这里面可以使用解包后的errorCode ,此时不需要加!
        但是出了花括号 ,errorCode又是可选型了。这是因为swift是严格的类型语言。
    }

    if let 这里可以用逗号隔开,对多个可选型进行解包 ,这里还可以用where关键字判断是否为某个值{

    (4)隐式解析可选:

    非Optional的变量必须在声明时或者构造器中进行初始化,但是如果想在viewDidLoad中初始化,所以只能声明Optional:var myLabel: UILabel? ,虽然我们确定在viewDidLoad 中初始化,并且在ViewController的生命周期内不会置为nil, 但是对myLabel操作时,每次依然要加上!来强制拆包

    myLabel!.text = "text"

    myLabel!.frame = CGRectMake(0,0,10,10)

    对于这种类型的值,我们可以直接这么声明 var myLabel: UILabel!,这种是特殊的Optional,称为Implicitly Unwrapped Optionals, 直译就是隐式拆包的Optional,就等于说你每次对这种类型的值操作时,都会自动在操作前补上一个!进行拆包

    (5)Swift 的nil和 Objective-C 中的nil并不一样。在 Objective-C 中,nil是一个指向不存在对象的指针。在 Swift 中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选都可以被设置为nil,不只是对象类型。

    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    2019.6.20刷题统计
    36 线程 队列 守护线程 互斥锁 死锁 可重入锁 信号量
    35 守护进程 互斥锁 IPC 共享内存 的方式 生产者消费者模型
    34 进程 pid ppid 并发与并行,阻塞与非阻塞 join函数 process对象 孤儿进程与僵尸进程
    33 udp 域名 进程
    32 粘包 文件传输
    31 socket客户端. 服务器 异常 语法
    30 网络编程
    29 元类 异常
    26 封装 反射 常用内置函数
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/6866045.html
Copyright © 2011-2022 走看看