Swift语言中与C/C++和Java不同的语法(二)

这一部分,主要讲Swift中创新的可选型(optionals)

一、概要

可选型是Swift创新的一种新的类型,首先看一下可选型的应用场景:

var errorCode : Int = 404

这时候errorCode的值是404,表示此时的错误状态码是404,当产生一种错误的时候就会获得其对应的errorCode,

但是如果没有错误那应该怎么办呢?

在C/C++和Java中我们会给errorCode赋值为0或者是null(其实null也就是0),但是我们怎么能够保证0不是一种错误的状态码呢?

Swift为了解决这一问题,提供了可选型(optionals)当这个值不存在的时候,我们用nil表示,

需要注意的是:

var errorCode : Int = 404

errorCode = nil

这是错误的,因为nil是一种特殊的类型,是不可以赋值给int型的变量的。

正确的操作是:

var errorCode : Int? = 404

errorCode = nil

添加一个?就对了,这时候Int?表示的是整型的可选型

需要注意的是,可选型不可以赋值给不可选型的变量。

二、可选型的解包

在使用可选型的时候,需要进行解包操作,有两种解包(unwrap)方式:

1)强制解包

var errorCode : Int? = 404

print(“The errorCode is”+errorCode!)

这种解包方式需要开发者保证errorCode的值不是nil,否则就会报错。

2)if-let解包

var errorCode : Int? = 404

if let errorCode = errorCode {

  print(“The errorCode is”+errorCode)  

}

建议采用这种方式,当出现多个量需要解包的时候:

if let errorCode = errorCode,

   errorMessage = errorMessage{

}

三、optional Chaining

先看看应用环境:

var errorMessage : String? = “Not Found”

if let errorMessage = errorMessage{

  errorMessage.uppercaseString

}

这种方式是错的,因为errorMessage是String而不是String?

如果要使用String的uppercaseString方法的话可以这样做:

errorMessage?.uppercaseString

或者

errorMessage!.uppercaseString(确定不是nil)

这里的返回类型也是一个可选型

如果errorMessage!.uppercaseString返回,再进行操作就类似一条chain。

四、nil coalesce

我们建议在声明变量的时候就给变量赋初值,但有时候,我们希望通过后面的逻辑判断之后再对变量进行赋值

这时候我们可以这样做:

var errorMessage : String? = nil

let message = errorMessage == nil ? “Not Found” : errorMessage

当然可以通过nil coalesce方式

var errorMessage : String? = nil

let message = errorMessage??“Not Found”

五、元组的可选型

var error1 : (errorCode : Int?, errorMessage : String?) = (404, “Not Found”)

其中errorCode和errorMessage是可选型,但是error1不是可选型

因此errorCode和errorMessage可以是nil,而error1不可以

var error1 : (errorCode : Int?, errorMessage : String?)? = (404, “Not Found”)

errorCode和errorMessage,error1就都是可选型了

六、隐式可选型

主要应用在函数的构造函数中

var errorMessage : String! = nil

!进行使用的时候可以不进行解包操作,但是必须确保不为nil

在使用的时候,构造函数可以这样定义,但是在后面会先赋值,再使用。

时间: 2024-12-09 00:43:48

Swift语言中与C/C++和Java不同的语法(二)的相关文章

Swift语言中与C/C++和Java不同的语法(五)

这一节将会提到Swift中其他的关于函数的应用,这些内容包括有: 默认参数值和可变参数值.常量参数.返回函数类型和函数嵌套: 一.默认参数值和可变参数值 对默认参数值是指在函数的声明中就已经定义了参数的初值,比如: func sayHelloTo(name:String,greeting:String = "Hi", punctuation:String = "!"){ } 在调用的时候可以是: sayHelloTo(name:"PlayGround&qu

在Swift语言中,关于Any,AnyObject,AnyClass的区别与联系

在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: AnyObject?) -> Bool var hash: Int { get } var superclass: AnyClass? { get } func `self`() -> Self! func isProxy() -> Bool func isKindOfClass(aClas

Swift语言中 String 的一些操作方法

整理自慕课网liuyubobobo老师在<玩儿转Swift>课程中的讲解,在此表示感谢!同时推荐这套视频课程http://www.imooc.com/learn/127 var str = "Welcome to Play Swift! Step by step to learn Swift." // Range的用法和相关字符串的操作代码片段  str.rangeOfString(“Step”)  // 字符串片段“Step”所处的字符范围 23..<27, 也即第

Swift语言中的switch语句的妙用

Swift中的switch语句的类另用法: // 强大的switch语句 var a:Int = 100 switch a { case a where a < 0: println("Negative") case a where a == 0: println("Zero") case a where a > 0: println("Positive") default: println("Unknow") }

Java的基础语法(二): 常量,数据类型,变量

4.常量 ①.定义: 在程序执行过程中,其值不可以发生改变 ②.分类: 整数常量: 所有整数 小数常量: 所有小数 字符常量: 用单引号括起来的内容,里面只能放单个数字/单个字母/单个符号(可以是空格字符,但不能什么都不放) 字符串常量: 用双引号括起来的内容(长度可以为0,即空字符串"") 布尔常量: 只有true和false 空常量: null 5.数据类型 ①.意义: Java是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配配了不同大小的内存空间 ②.分类:

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内

swift语法和java的比较

1. 定义常量和变量 a. Swift语法 常量: let MaxNumber = 10 变量: var name = 1 b. Java语法 常量: public final int MaxNumber= 10; 变量: public String name = "morden"; 这里要注意的是swift有类型标注(type annotation)这个语法:如果要添加类型标注,需要在常量或者变量名后面加上一个冒号和空格,然后加上类型名称.但是因为swift编译器可以进行类型安全判定

Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似.不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围. 举个例子来说明一下,如果希望为彩虹描绘出七种颜色,你可以在 Java 程序中通过常量定义方式来实现. 清单 1. 常量定义 Public static class RainbowColor { // 红橙黄绿青蓝紫七种颜

java语言中的varargs

java语言中的varargs允许调用者传递数量不定的参数,并传入的数量不定的实参转化为数组形式的形参. 那么不传递任何参数,或者传入null时,形参的值是什么呢?下面是测试代码和运行结果: 1 private void test1(int... args) { 2 if (args != null) { 3 System.out.println("[test1] args.length = " + args.length); 4 } else { 5 System.out.print