Swift-002-4.0基础语法补充

Swift 基础语法补充:

一.可选类型

可选类型是swift的一大特色,在定义变量时,如果指定这个变量是可选的话,就是说这个变量可以有一个指定类型的值或者为nil。

? 和 ! 的区别

“?”表示可选类型(Optionals),“!”表示隐式可选类型,其实还是可选类型。

可选类型:将已存在的某种类型(结构体、枚举、类)定义为可选类型,表示该“新”类型的值可以为空nil   

var nickName : String?

使用self.label!是明确声明此时self.label里一定有值,无论什么情况都调用后面的.text赋值方法。

而使用self.view?是声明此时并不确定self.view里是否有值,所以只在view有值时调用后面.addSubview方法。

这样做的目的一是让代码更明确, 二是给编译器提供更多线索,在编译时发现更多潜在错误。

1.定义一个optional 的常量

let x:Optional = 10
print(x)

点击进去查看,可以发现Option其实是一个枚举类型。这个枚举有两个值,一个是none,表示没有值,而另一个是some,表示某一类值。

在输出的时候,可以看见控制台上的内容Optional(10),它的作用就是提示这是一个可选值。

而在实际开发中,一般不用上述方式创建可选值,而是指定一个类型,再在其后添一个问号。

let x:Optional = 10  //第一种写法
let x:Int? = 20     //第二种写法
print(x)

上述代码问号的意思就是定义一个可选的Int类型,可能没有值,也可能有一个整数

2.解包

试试将上面案例x和y相加,这个时候还能输出结果么?

此时可以看到编译器已经报错。在前面的教程中提到过,不同类型的值是不能直接运算的可选项若它的值为nil则不能参加计算

因此引入解包的概念,“!”代表强制解包它的意思是从可选值中强行获取对应的非空值

输出结果:

3.解包常见错误

 

//错误示范1
let y : Int?
print(y)

使用let定义的是常量,在初始化时必须要给出值

//错误示范2:
let y : Int? = nil
print(y)

强制解包是危险操作,如果可选值为nil,强制解包系统会奔溃

4.let 和 var的可选默认值

//默认值测试
let x: Int?
print(x)
var y :Int?
print(y)

用let做测试时会直接报错,说明let的可选值是没有默认值的,而用var做测试时,报错信息就变成了警告,运行的结果为nil。可以由此推测出var的可选项默认值为nil

swift中有规定,对象中的任何属性在创建对象时,都必须有明确的初始化值。

5.可选绑定

if let/var表示。它将变量赋值给一个临时变量,在这个操作中会做两步操作:首先判断变量是否有值,如果没有值,则直接不执行大括号里面的内容;如果有值,系统会自动将变量进行解包,并且将解包后的结果,赋值给临时变量

//例如

通过一个字符串创建NSURL对象

 

let url: URL? = URL(string: "https://www.baidu.com")

接着创建NSURLRequest对象.

强制解包非常危险,当url有中文的时候可能会变成nil。所以要判断url是否为空再对其进行解包

if let url = url {
    let request = URLRequest(url: url)
}

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/StevenHuSir/p/Swift_GrammarAll.html