• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这一部分,主要讲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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift能干什么,不能干什么及相关概念发布时间:2022-07-13
下一篇:
swift中的AnyHashable发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap