16.5 Swift可选链的赋值操作
/** 16.5-可选链的赋值操作 */
class Person { var name = "" func whoami() -> String { print("My name is (name)") return name }
init(name: String) { self.name = name } }
var p1: Person = Person.init(name: "Tom") p1.name = "zhangsan" p1.whoami()
var p0: Person?
p0 = p1
p0?.name = "Lisi"
if p0 != nil { print("p0!.name==(p0!.name)") } print("p1.name==(p1.name)") /**
p0!.name==Lisi p1.name==Lisi 所以看修改了 p0的name属性之后,p1的name属性也被改变了。因为, class 类型是引用类型, p0 = p1 是浅拷贝。 但是如果把 Person 改为 struct类型就不会出现这个。 因为struct类型是值类型, p0 = p1 是深拷贝, */
/** 判断赋值操作是成功还是失败了, 赋值操作也有返回值,是可选类型 赋值操作返回 () 就是 Void,另一种可能就是返回 nil */ let res = p0?.name = "LIsi"
// () 就是 Void, let res1: Void? = (p0?.name = "Lisi")
print("res==(res)") /** res==Optional(()) 也就是说这个可选类型的赋值操作的返回值是一个可选类型。 */
if (p0?.name = "Lisi") != nil { print("赋值成功") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |