swift属性

swift有三种属性:1、存储属性 2、计算属性 3、类型属性


  • 存储属性

    //1、存储属性
    class Person{
    //常量不可改值,变量可以,存储属性初始化的时候必须给初始值
    var name:String = "张三"
    var height:Double = 1.75
    let life = 1
    
    }
    
    var person1 = Person()
    person1.name = "王二"
    person1.height = 1.81
    println("这个人的姓名是\(person1.name)")
    println(person1.height)
    println(person1.life)
    
  • 计算属性
    //2、计算属性
    class Square{
    var width:Double = 0
    var girth:Double{
    get{
    return width*4
    }

      //1-1、newValue是隐藏属性
      //        set{
    //            girth = newValue / 4
    //        }
      //1-2、也可自己定义赋值
      set(newGirth){
          
         width = newGirth / 4
        }
      }
    }
    var s = Square()
    s.width = 10
    println("这个矩形的周长是\(s.girth)")
    
    var q = Square()
    q.girth = 80
    println("这个矩形的宽为\(q.width)")
    
  • 类型属性

      //3、类型属性
      class Circle{
      //如果不写set方法,只写get方法的话,那么该属性只有get方法
      class var PI: Double {
          return 3.14
      }
    }
    
    var circle1 = Circle.PI * 6
    println("这个圆的周长是\(circle1)")
    
  • 补充

    //延时加载(即何时用到何时加载)可以避免资源的浪费,当一些属性内容中含有太多信息的时候考虑用
    //延时加载不能用于计算属性,也不能用于常量属性
    class Animal{
    
    var name:String = "dog"
    
     lazy var status:String = "这是一个延时加载的属性"
    let life:Double = 1
    class var age:Double{
      get{
          return 20
      }
      set{
          age = newValue * 2
        }
      }
    }
    var animal1 = Animal()
    

//⚠注意,以下写法会发生死循环

class Triangle{
    var area:Double {
        get{
            println("get方法被调用")
            return area
        }
        set{
            println("set方法被调用")
            area = newValue
    }
  }
}

//在一个类对象被创建出来的时候会自动调用init()方法

class Test {

init(){
    println("Test类创建被调了")
  }
}

var test = Test()

你可能感兴趣的:(swift属性)