zoukankan      html  css  js  c++  java
  • Swift 可选值

    可选值(Optional value)有两种状态 1.它有一个值  2.它没有值

    Optional type是swift里面的一个新的概念

    上面的serverResponseCode就是一个Int?类型,上面代码代表serverResponseCode的两种不同状态

    在做一些不确定的操作的时候特别有用,比如当尝试把字符串转成数字的时候:

    如果转换成功,convertedNumber里面就存着123这个值,如果转换失败,则存储nil值

       nil在OC和swift中是不同的,在OC中nil是指向一个不存在对象的指针,而在swift中,nil代表可选值的状态是“值不存在”,所以在swift中,int等等基本类型的可选值也可以被赋值为nil

    如果在声明可选值的时候没有赋初值,可选值会自动获得nil值

    拆包(unwrapping)

    这里的!就是强制拆包(force unwrapping)操作,如果可选值没有值,又对可选值进行强制拆包操作,那么这时候会报出一个运行时错误。

    所以在强制拆包前总是要检查一下可选值是否为nil,上面的写法有些麻烦,swift提供一个简略的写法

    上面的“let actualNumber”也可以换成var actualNumber

    隐式已拆包可选值(Implicity Unwrapped Optionals)

    如果程序员可以保证一个可选值的总是有值的,而且频繁的拆包比较麻烦,这时可以使用Implicity Unwrapped Optionals

    相当于使用的时候都会自动拆包,声明使用!来代替?

    我的理解是在需要拆包的时候Implicity Unwrapped Optionals会自动拆包,在不需要拆包的时Implicity Unwrapped Optionals表现和普通的可选值是一样的

    需要拆包的时候会自动拆包:

    不需要拆包的时候表现与普通可选值一样:

  • 相关阅读:
    HDU 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/CharlieSu/p/4422574.html
Copyright © 2011-2022 走看看