Swift在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
类型转换Demo 发布于:2021-11-08 17:03 闭包引起的相互应用导致内存泄漏问题 发布于:2021-11-08 16:49 无主引用解决相互引用导致的内存泄漏问题 发布于:2021-11-08 16:35 使用弱引用解决循环引用导致的内存泄漏 发布于:2021-11-08 16:28 循环引用导致的内存无法释放 发布于:2021-11-08 16:27 嵌套函数 传递值 发布于:2021-09-24 19:27 定义参数 各种类型 发布于:2021-09-24 19:26 定义类和创建实例 发布于:2021-09-24 19:25 s双色球的运行代码 发布于:2021-09-23 17:13 比较代码的不同 发布于:2021-09-23 17:05 判断和符号 发布于:2021-09-23 17:04 定义和赋值 发布于:2021-09-23 17:03 元组的类型 发布于:2021-09-23 17:03 case的使用方法必须存在可执行的代码 发布于:2021-09-23 17:00 字典的用法 发布于:2021-09-23 17:01 创建空集合和创建集合赋值 插入 insert() 循环 for ...in 删除 remove() 包含 contains() 发布于:2021-09-23 14:46 是完数的代码 发布于:2021-09-23 17:10 一年中的第几天 发布于:2021-07-12 00:16 无重复的三位数 发布于:2021-07-12 00:03 三位水仙花数计算 发布于:2021-07-11 23:47 罗列出范围内质数 发布于:2021-07-11 23:29 Swift数据结构: 链表(Linked List) 发布于:2021-06-27 18:03 swift数据结构:树 发布于:2021-06-25 10:21 面向协议编程 发布于:2021-06-24 17:58 泛型约束试验 发布于:2021-06-23 18:06 泛型试验案例 发布于:2021-06-23 16:45 异常处理及 App 的生命周期:error协议 发布于:2021-06-28 14:22 用协议建立规则 protocol 发布于:2021-06-23 14:55 多线程:存储和 CPU 的运作方式 发布于:2021-06-22 17:11 class类和Enumeration枚举的使用 发布于:2021-06-22 16:41 结构体的运用 发布于:2021-06-22 15:12 我的代码! 发布于:2020-11-18 11:54 string test 发布于:2020-12-01 10:46 第一个swift测试类 发布于:2020-07-21 18:45 [更多]
显示目录

可选(Optionals)类型



Swift 可选(Optionals)类型

Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。

Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:

var optionalInteger: Int?
var optionalInteger: Optional<Int>

在这两种情况下,变量optionalInteger都是可选整数类型。注意,在类型和?之间没有空格。

Optional 是一个含有两种情况的枚举,None和Some(T),用来表示可能有或可能没有值。任何类型都可以明确声明为(或者隐式转换)可选类型。当声明一个可选类型的时候,要确保用括号给?操作符一个合适的范围。例如,声明可选整数数组,应该写成(Int[])?;写成Int[]?会报错。

当你声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为nil。

可选项遵照LogicValue协议,因此可以出现在布尔环境中。在这种情况下,如果可选类型T?包含类型为T的任何值(也就是说它的值是Optional.Some(T)),这个可选类型等于true,反之为false。

如果一个可选类型的实例包含一个值,你可以用后缀操作符 !来访问这个值,如下所示:

optionalInteger = 42
optionalInteger! // 42

使用操作符!去获取值为nil的可选变量会有运行时错误。

你可以用可选链接和可选绑定选择性执行可选表达式上的操作。如果值为nil,任何操作都不会执行,也不会有运行报错。

让我们来详细看下以下实例来了解 Swift 中可选类型的应用:

import Cocoa

var myString:String? = nil

if myString != nil {
    print(myString)
}else{
    print("字符串为 nil")
}

以上程序执行结果为:

字符串为 nil

可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。


强制解析

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)。

实例如下:

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {
   print(myString)
}else{
   print("myString 值为 nil")
}

以上程序执行结果为:

Optional("Hello, Swift!")

强制解析可选值,使用感叹号(!):

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {
   // 强制解析
   print( myString! )
}else{
   print("myString 值为 nil")
}

以上程序执行结果为:

Hello, Swift!

注意:
使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。


自动解析

你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。

实例如下:

import Cocoa

var myString:String!

myString = "Hello, Swift!"

if myString != nil {
   print(myString)
}else{
   print("myString 值为 nil")
}

以上程序执行结果为:

Hello, Swift!

可选绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

像下面这样在if语句中写一个可选绑定:

if let constantName = someOptional {
    statements
}

让我们来看下一个简单的可选绑定实例:

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if let yourString = myString {
   print("你的字符串值为 - \(yourString)")
}else{
   print("你的字符串没有值")
}

以上程序执行结果为:

你的字符串值为 - Hello, Swift!
由JSRUN为你提供的Swift在线运行、在线编译工具
        JSRUN提供的Swift在线运行,Swift 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入: