zoukankan      html  css  js  c++  java
  • Swift,结构体与类

    1、结构体(小的类就是用struct来写)

    struct arrow{
      var x=0,y=0
    }
    

    2、类(常用)

    class a{
      var a=10
      var b=20
    }
    var b=a()  //实例化
    print(b.a)  //10

    3、类(class)与结构体(struct)的简易不同

    (1)class 不能直接用 x(a:1) ,必需要定义一個 constructor

    struct SRectangle {
      var width = 200
    }
    var sRect = SRectangle()  //实例化
    sRect = SRectangle(300)  //设置里面的值,class这样的话就会报错
    print(sRect.width)   //300
    

    (2)class共用赋值地址,struct赋值地址分开

      1、struct

    var sRect = SRectangle()
    var sRect2 = sRect
    sRect2.width   // 目前值是 200,因為 sRect 直接 copy 一份完整記憶體給 sRect2
    sRect2.width = 500
    sRect.width   // sRect.width 值不受 sRect2 影響還是 200
    

      2、class

    var cRect = CRectangle()
    var cRect2 = cRect
    cRect2.width   // 目前值是 200,因為 sRect 直接 copy 一份完整記憶體給 sRect2
    cRect2.width = 500
    cRect.width   // cRect.width 也改變成了 500

    4、计算属性中的getter(描述属性如何计算及返回语句)

    struct data{
      let name="a"
      var money=0
    }
    class random {
      var my=data()
      var state="carry"
      var work:data{  //继承data的类型
        get{        //不可忽略
          switch state{
            case "carry":
            my.money+=1000
            default:
            my.money+=200
          }
        return my
        }
      }
    }
    var HI=random()
    print(HI.my.money)  //0
    print(HI.work.money)  //1000
    HI.state="" 
    print(HI.work.money)  //1200

    5、计算属性中的setter(有新值(newValue)后如何影响其他的值)

    struct data{
      var name="a"
      var money=0
    }
    class random {
      var my=data()
      var work:data{
        get{      //不可忽略
          return my
        }
        set{
          my=newValue
        }
      }
    }
    var HI=random()
    HI.work=data(name:"hi",money:500)
    print(HI.my.money)  //500

    6、属性监视器,事前响应(willSet),时候响应(didSet)

    class money{
      var tatal=0{
        willSet{
          print("当前(newValue)")  //本身有变量newValue
        }
        didSet{
          print("增加(tatal-oldValue)")  //本身有变量oldValue
        }
      }
    }
    var money1=money()
    money1.tatal=1000  //当前1000 增加1000
    money1.tatal=4000  //当前4000 增加3000
    

      

      

  • 相关阅读:
    如何实现多个异步同步执行?
    Treap学习笔记
    实验
    bzoj2876 [NOI2012]骑行川藏(拉格朗日乘数法)
    [SCOI2007]最大土地面积(旋转卡壳)
    Splay学习笔记
    计算几何学习笔记
    [CQOI2006]凸多边形(半平面交)
    大数的乘法(C++)
    商人过河问题(DFS)
  • 原文地址:https://www.cnblogs.com/huangqiming/p/7521431.html
Copyright © 2011-2022 走看看