Swift-可选类型和可选链

可选类型以及可选链

/*
    可选链 - 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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值