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


         所以看修改了 p0name属性之后,p1name属性也被改变了。因为,

         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("赋值成功")

        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>