您的位置:首页 > 移动开发 > Swift

Swift-可选类型和可选链

2017-01-10 17:17 120 查看
可选类型以及可选链

/*
可选链 - Optional Chaining
*/

import Foundation

/*
1、深入研究可选类型
*/
print("1、深入研究可选类型")
//有值,没有值nil,可选类型有两种状态
var opa:Optional<Int> //Optional--enum类型
var opb:Int?

//基本类型变量,必须在使用之前先进行初始化
//(初始化)安全!!!,因为不管在什么时候访问某个普通变量,都有意义
//普通变量只有一种状态:有值
var aa:Int = 2

print(opa)
print(opb)
print(aa)

//可选类型是否安全--判空同时解包,这样使用很安全
if let xa = opa{
print(xa)
}

var data:NSData? = NSData(contentsOfFile: "etc/passwd")
print(data)

/*
2、可选链
*/
print("\n2、可选链")
class Person{
var name = ""
func whoami() -> String{
print("My name is \(name)")
return name
}
init(name:String) {
self.name = name
}
}

var p0:Person?
var p1:Person = Person(name:"Tom")
p1.name = "Sam"
p1.whoami()

//通过可选类型来调用相应的属性或者方法等
/*p0!.name = "Si"
p0!.whoami()
if let t:Person = p0{
t.name = "Wu"
t.whoami()
}
if p0 != nil{
p0!.name = "Li"
p0!.whoami()
}*/

//可选链方式
p0?.name = "Liu"
p0?.whoami()

/*
3、可选链的返回值
*/
print("\n3、可选链的返回值")
p0 = p1
let t:String? = p0?.name
let t1:String = p0!.name
print(p0?.name) //可选值类型
print(p0!.name)
print(p0?.whoami()) //可选值类型

/*
4、通过可选链调用下标索引
*/
//可选值?.属性
//可选值?.方法
//调用下标方法:可选值?[参数]
print("\n4、通过可选链调用下标索引")
class MyStringHash {
subscript(x:String) -> Int{
return x.hashValue - 1000
}
}

var sh = MyStringHash()
var sho:MyStringHash?
sho = sh
print(sh["abc"])
print(sho?["abc"])

var arr:[Int]? = [1,2,3,4]
print(arr?[1])

/*
5、可选链的赋值操作
*/
print("\n5、可选链的赋值操作")
p0 = p1
p0?.name = "liu"
print(p1.name)

//判断赋值操作是否成功
let res:Void? = (p0?.name = "Lisi")
print(res)
if (p0?.name = "Lisi") != nil{
print("成功")
}

/*
6、多层链接的可选链
单层链接:a?.属性
多层链接:d.c?.b.a?.tag
*/
print("\n6、多层链接的可选链")

class A {
var tag:String = ""
}

class B {
var a:A?
}

class C {
var b:B = B()
}

class D {
var c:C?
}

var d = D()
var c = C()
var a = A()
a.tag = "er"

d.c = c
d.c?.b.a = a
print(d.c?.b.a?.tag)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: