美文网首页swift学习
Swift5.1 - 可选项Optional(5)

Swift5.1 - 可选项Optional(5)

作者: HChase | 来源:发表于2019-06-26 00:10 被阅读47次

1. 可选项的基本使用

  • 可选项也叫 可选类型,它允许值设置为nil
  • 在可选类型名称后面加一个 问号?,来定义一个可选项;
var num:Int? = 10
num = nil
var name:String? // 默认是nil
name = "Son"
print(name)  // Optional("Son")

2. 强制解包

  • 可选项是对其他类型的一层包装,可以理解为一个盒子;
  • 如果为nil,那么为空盒子;
  • 如果不位nil,那么盒子里装的是:被包装类型的数据;
var name:String? // 默认是nil
name = "Son"
name = nil
  • 如果要从可选项中取出被包装的数据,需要使用 感叹号! 进行强制解包;
var name:String? = "Son" // 默认是nil
let name1 = name!
print(name1)
  • 如果可选项的值为 nil,对其进行强制解包,将会报错闪退;

3. 判断可选项是否包含值

var name:String? // 默认是nil
name = "Son"

if name != nil {
    print("name = \(name!)")
} else {
    print("name is nil")
}

4. 可选项绑定(Optional Binding)

  • 可以使用可选项绑定来判断可选项是否包含值;
  • 如果包含就自动解包,将值赋给一个临时的的常量(let)或变量(var),并返回true,否则返回false
var name:String? // 默认是nil
name = "Son"

if let name = name {
    print("name = \(name)")
} else {
    print("name is nil")
}
//  name = Son
enum Score: Int {
    case a, b , c, d
}

if let score = Score(rawValue:5) {
    print("成绩存在 score = \(score)")
} else {
    print("成绩不存在")
}
// 成绩不存在

5. while循环中使用可选项绑定

var strs = ["10", "20", "30", "ab", "40"]
var index = 0
var sum = 0
while let num = Int(strs[index]), num > 0 {  // , 相当于 &&
    sum += num
    index += 1
}

print(sum)
// 60

6. 空合并运算符 ??

public func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?
  • a ?? b
  1. a 是可选项;
  2. b 是可选项 或者不是可选项;
  3. b 跟 a 的存储类型必须相同;
  4. 如果 a 不为 nil,就返回 a;
let a: Int? = 10
let b: Int? = 20

print(a ?? b)
// Optional(10)
  1. 如果 a 为 nil,就返回 b;
var a: Int?
let b: Int? = 20

print(a ?? b)
// Optional(20)
  1. 如果 b 不是可选项,返回 a 时会自动解包;
var a: Int? = 10
let b: Int = 20

print(a ?? b)
// 10
  1. 多个 ?? 一起使用;
let a: Int? = 10
let b: Int? = 20
let c = a ?? b ?? 30

print(c) // c 为 Int ,10
let a: Int? = nil
let b: Int? = 20
let c = a ?? b ?? 30

print(c) // c 为 Int ,20
let a: Int? = nil
let b: Int? = nil
let c = a ?? b ?? 30

print(c) // c 为 Int ,30

总结多个 ?? 一起使用时,最右边的类型决定结果是否时可选项,如果最右边是可选项,则结果是可选项,否则结果不是可选项;

7. guard语句

guard 条件 else {
    // do something ...
    退出当前作用域
    // return 、 break、continue、throw error
}
  • 当 guard 语句的条件为 fasle 时,就会执行大括号里面的代码;
  • 当 guard 语句的条件为 true 时,就会跳过guard语句,执行后面代码;
  • 当使用 guard 语句进行可选项绑定时,绑定的常量(let)、变量(var)也能在外层作用域使用;
let name: String? = "Son"

guard let n = name else {
    return
}
print(n)

8. 字符串插值

  • 可选项在字符串插值或直接打印时,编译器会发出警告;
let name: String? = "Son"
print("\(name)")
  • 消除警告
let name: String? = "Son"
print("\(name!)")
let name: String? = "Son"
print(String(describing: name))
let name: String? = "Son"
print("\(name ?? "")")

相关文章

  • Swift5.1 - 可选项Optional(5)

    1. 可选项的基本使用 可选项也叫 可选类型,它允许值设置为nil; 在可选类型名称后面加一个 问号?,来定义一个...

  • 05-可选项

    可选项(Optional) 强制解包(Forced Unwrapping) 判断可选项是否包含值 可选项绑定(Op...

  • Swift5.1学习随笔之可选项Optional

    可选项 Optional 先看下这几句代码:在Swift中,默认情况下,这些类型不能直接设置为nil,只有声明为可...

  • Swift5复习(二)可选项、结构体、类、闭包

    Swift复习(二)可选项、结构体、类、闭包 一、 可选项(Optional) 定义 可选项,一般也叫可选类型,它...

  • The Basics(基础部分下)

    Optional Binding (可选项绑定) You useoptional bindingto find o...

  • [Swift5.1] 13-可选链

    可选链(Optional Chaining) 可选项包装 如果可选项为nil,调用方法、下标、属性失败,结果为ni...

  • swift 可选项optional

    Optional 可选项 Optional是 Swift 的一大特色,也是 Swift 初学者最容易困惑的问题 定...

  • Swift3.0 基础语法1

    主要分为以下几个部分 : 1.变量和常量 2.可选项Optional2.1 '?' 和 ‘!’使用2.2 可选项的...

  • 可选项(Optional)

    可选项(Optional) 可选项,一般也叫可选类型,它允许将值设置为nil 在类型名称后面加个?来定义一个可选项...

  • 可选项Optional

    1、初始化值定义 /****初始化值定义*/func demo1() {//1.原始的可选项定义//none 没有...

网友评论

    本文标题:Swift5.1 - 可选项Optional(5)

    本文链接:https://www.haomeiwen.com/subject/ishtcctx.html