Object-C--->Swift之(二)可选类型

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

可选和nil的恋情

    先看一个例子吧!
    let str="hello world"
    let num:Int=Int(str)

这两行代码的意思str字符串转换成Int类型,嘿嘿!这不是坑计算机吗?hello world能转换成Int类型的数字吗?很显然不能,而且我们运行都不会通过的!

可是我们把第二行代码换成

   let num:Int?= Int(str)

编译就通过了!就这样可选类型就呼之欲出!

定义:

在任何类型后面紧跟一个?就可以代表可选类型,可选类型的变量可用于处理“值缺失”的情况。

Int类型的变量或常量只能接受Int类型的数据,而Int?可以接受值缺失的状况,也就是能接受值为nil。

     var age:Int=nil  这个显然是错误的
     var age:Int?=nil 这个是可以的

注意:Int?和Int类型并不是相同的类型,程序不能直接把Int?类型的变量或者常量直接拿来当Int类型的变量或常量使用。

强制解析

为了获取可选类型的常量或变量的实际存储值需要用在后面加!进行解析。这个!的含义是:已经知道该可选变量有值了(要是实际里面没有值系统就会崩溃),提取里面的值。这种添加感叹号进行解析的用法叫做强制解析。

    例如:
    let str1:String?="hello"
    let str2:String?=" word"
    let result = str1! + str2!
    print(result)

之前说了使用!的前提是可选变量确实有值了,否则就会崩溃,所以我们需要提前判断可选类型是否有值。所以上面的代码这样写才正规一些:

 let str1:String?="hello"
 let str2:String?=" word"
  if str1 != nil && str2 != nil
    {
    let result = str1! + str2!
        print(result)
    }
    else
    {
    print("str1或者str2为nil,不能强制解析")
    }
  }

隐式可选类型

除了在任意已有类型后面添加?来表示可选类型外,可以加!来表示可选类型。
其中Int?和Int! 类型的区别在于:当用Int?表示可选类型的时候必须用!后缀强制解析,而程序用!类型表示可选变量时,无需在后面增添!后缀执行强制解析。Swift会自动执行隐式解析。

   let str1:String!="hello"
   let str2:String!=" word"
    if str1 != nil && str2 != nil
    {
    let result = str1 + str2
        print(result)
    }
    else
    {
    print("str1或者str2为nil,不能强制解析")
    }

最后用一个表清晰展示下可选类型的差异吧!

Int Int? Int!
是否可存储整数
是否接受nil
是否需要强制解析为Int
目录
相关文章
|
6月前
|
存储 Swift iOS开发
在Swift编程语言中,集合类型`Set`
在Swift编程语言中,集合类型`Set`
57 2
|
16天前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
22 2
|
16天前
|
Swift 索引
Swift 泛型-类型约束
Swift 泛型-类型约束
23 1
|
25天前
|
安全 Swift iOS开发
Swift 可选(Optionals)类型
10月更文挑战第24天
36 2
|
6月前
|
存储 安全 Swift
【Swift开发专栏】Swift中的集合类型:数组、字典与集合
【4月更文挑战第30天】本文探讨Swift的三种内置集合类型:数组、字典和集合。数组是有序元素集合,支持动态大小调整和类型安全;字典是无序键值对,适用于快速查找;集合是无序不重复元素集合,适合检查元素存在性和集合运算。理解这些特性和用法能提升Swift编程效率。
69 1
|
6月前
|
安全 Swift
【Swift开发专栏】Swift中的可选类型与解包
【4月更文挑战第30天】Swift的可选类型(Optional)用于表示变量可能无值,如用户未填写表单或空服务器数据。可选类型用问号(?)标记,状态可为包含值或nil。解包包括强制解包(!,可能触发运行时错误)、可选绑定(在if/while中安全解包)和隐式解包(声明时带!,使用时不需显式解包)。高级用法包括可选链式调用、空合并操作符(??)和可选类型比较。理解并恰当使用这些概念能提升代码的健壮性和安全性。
68 1
|
6月前
|
前端开发 Java 编译器
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
49 0
|
6月前
|
安全 Swift
Swift 语言:什么是可选类型(Optional)?如何处理可选类型的安全解包?
Swift的可选类型是处理值可能缺失的类,用?表示。它们能表示有值或无值状态。安全解包用`if let`或`guard let`避免崩溃,而强制解包`!`则风险较高,若值为`nil`会触发运行时错误。
49 0
|
6月前
|
存储 Swift 索引
在 Swift 编程语言中,集合类型 `Set`
在 Swift 编程语言中,集合类型 `Set`
65 1
|
6月前
|
Swift
在Swift编程语言中,有符号整数类型
在Swift编程语言中,有符号整数类型
62 2