Swift,結構體與類

kimingw發表於2017-09-14

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(width: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

  

  

相關文章