urn english
default:
return nil
}
}
set{
switch course{
case "math":
math = newValue! //返回值可选类型!
case "chinese":
chinese = newValue!
case "english":
english = newValue!
default:
print("not found")
}
}
}
}
var stu:Student? = Student()
//可选链调用下标引索不需要"."直接在?号后面加上[]即可
print(stu?["math"] as Any)
var arr:Array? = [1,2,3,4]
print(arr?[1] as Any)
//利用可选链赋值时, 要注意: 早些版本中不能利用可选链赋值
stu?.name = "hanjunqiang"
print(stu?.name as Any)
//利用可选链给下标赋值
stu?["chinese"] = 200.0
print(stu?["chinese"] as Any)
//判断赋值操作是否成功, 可选链的赋值操作也有返回值
//如果赋值成功会返回一个可选类型, 返回()?也就是Void? 代表成功, 返回nil代表失败
//let res1: = stu?.name = "xiaohange"
//let res1: ()? = stu?.name = "xiaohange"
//let res1: Void? = stu?.name = "xiaohange"
//print(res1)
stu = nil
let res: Void? = stu?.name = "HaRi"
print(res as Any)
/*
多层可选链:
单层: 可选值?.属性
多层: 可选值?.属性.属性 或者 可选值?.属性.属性?.属性
*/
class A {
var name:String = "han"
}
class B {
var a1:A?
}
class C {
var b1:B?
}
class D {
var c1:C?
}
var a1 = A()
var b1 = B()
var c1 = C()
var d1 = D()
d1.c1 = c1
// 通过d直接给b赋值
// 由于D中的C是可选值, 所以需要在C后面加上?号
d1.c1?.b1?.a1 = a1
// 通过d直接获取a中的name
// 其实只需要在可选值后面加上?号即可, 如果可选值不存在, 那么后面的链接失效
print(d1.c1?.b1?.a1?.name as Any)