Swift基础04

来源:互联网 发布:手机淘宝写追评句子 编辑:程序博客网 时间:2024/06/06 05:15

Swift基础04

属性,类属性和类方法


  • 用 class 创建一个类,所有的属性和方法都写在 class 的最外层的大括号里面
  • 在 swift 里面没有实例变量这个概念,只有属性
  • 定义属性和定义变量常量是一样的
  • 构造函数和构造器是一个东西
  • 如果定义属性没有设初始值,我们需要在构造函数中为属性设初始值,不然会报错
class Person {    var name: String    var age: Int    let counry: String    init (name: String, age: Int, country: String) { //创建Person类的对象时会调用,给对象的属性初始化值        self.name = name        self.age = age        self.counry = country    }}//如://创建一个Person类的对象let person: Person = Person(name: "xiaohuang", age: 20, country: "China") print("name:\(person.name)")print("age:\(person.age)")print("country:\(person.counry)")

存储属性和计算属性

  • 存储属性是需要在内存里面开辟空间,保存属性值的属性
  • 计算属性不开辟空间,只在调用的时候,临时取到它的闭包里面的值,实质上是调用一个方法
class Person {    //存储属性    var name: String    var age: Int    let counry: String    //计算属性    var kindName:String {        //完整的写法        get {            return "亲爱的\(name)"        }        //简略的写法:直接return就行了        //return "亲爱的\(name)"    }    //定义一个私有的可选属性,只有这个类内部可以调用    private var _pet: String?    //定义一个计算属性pet来对私有属性_pet进行存取    var pet: String {       //当对计算属性pet取值时调用get方法,返回的是_pet的值        get {            return _pet!        }        //当对pet赋值时,调用set方法,给_pet赋值,以下写法写死了,无法将外部的值传进来        set {             _pet = "baobao"        }    }    //可选属性不需要在构造函数(init()方法)里面初始化    init (name: String, age: Int, country: String){        self.name = name        self.age = age        self.counry = country    }}let person = Person(name: "xiaowang", age: 20, country: "China")person.pet = "haha" //调用了计算属性pet的set方法print("pet:\(person.pet)") //调用了计算属性pet的get方法print(person.kindName) //result:"亲爱的xiaowang"

可选属性

  • 如果一个属性可能有值,可能没有值,那么这个属性就叫做可选属性
  • 可选属性在没有赋值之前,也是没有开辟内存空间的。
class Person {    var name: String    var age: Int    let counry: String    var girlFriend: String? = "mingming" //定义可选属性并初始化    //计算属性简写版    var kindName: String {        return "亲爱的\(name)"    }    init (name: String, age: Int, country: String){        self.name = name        self.age = age        self.counry = country    }}let person = Person(name: "xiaowang", age: 20, country: "china")print(person)

懒加载

  • 懒加载,就是指一个属性,在第一次使用的时候,才对其进行初始化
  • 用关键字 lazy 表示懒加载属性
  • 将属性的初始化代码放到闭包中,接一对小括号表示立即执行
  • 在第一次调用的时候才分配内存空间
class Person {    var name: String    var age: Int    let counry: String    var girlFriend: String? = "mingming"    //懒加载属性    lazy var dog: String = {        return "xiaobao"    }()    //上面的懒加载属性的简写版//    lazy var dog: String = "xiaobao"    var kindName: String {        return "亲爱的\(name)"    }    init (name: String, age: Int, country: String){        self.name = name        self.age = age        self.counry = country    }}let person = Person(name: "xiaowang", age: 20, country: "China")person.dog //调用懒加载属性person.kindName

属性观察器

  • 属性观察器,就是对属性加一个 willSet 和 didSet.当属性的值发生变化时,会调用 willSet 和 diset.
class Person {    var name: String    var age: Int    let counry: String    var weight: Float = 125.6 {        //只要给weight赋值,willSet 和 didSet两个方法都会被调用        //willSet方法先调用,didSet方法后调用        willSet {            if newValue > 180 {                print("该减肥了")            }        }        didSet {            if weight < 90 {                print("\(oldValue)吃吃吃。。。。")            }        }    }    init (name: String, age: Int, country: String){        self.name = name        self.age = age        self.counry = country    }}let person = Person(name: "xiaowang", age: 20, country: "china")person.weight = 190 //调用属性观察器(就两个方法:willSet 和 didSet)person.weight = 89

类属性和类方法

class Person {    var name: String    var age: Int    //类属性,用 static 标识,如果属性是计算属性,需要用 class 标记    static var country: String = "China"    //类的计算属性    class var kindName:String {        get {            return "亲爱的\(country)"        }    }    //类方法,用 class 标识    class func changeCountry() ->String {        country = "American"        return country    }    init (name: String, age: Int) {        self.name = name        self.age = age    }}let person = Person(name: "xiao", age: 20)print(Person.country) //读取类属性print(Person.changeCountry()) //调用类方法改变类属性的值print(Person.country) //再次读取已经修改后的类属性print(Person.kindName) //读取类的计算属性/*result:  China  American  American  亲爱的American*/
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕带孩子不能上班保险怎么办 怀孕了不想上班保险怎么办 高铁票没票了怎么办 购买动车票无座怎么办 个税工资多报怎么办 火车晚点耽误了转车怎么办 坐火车联系不上怎么办 号码被别人注册了12306怎么办 注册12306的号码换了怎么办 12306号码被注册了怎么办 12306身份证被注册了怎么办 12306被别人注册了怎么办 铁路1236注册名忘记了怎么办 12306手机被别人注册了怎么办 12306注册手机不用了怎么办 到站后火车票掉了怎么办 在手机上买了票怎么办 智行火车票抢不到票怎么办 高铁买票票丢了怎么办 异地恋房费太贵怎么办 高铁票车上丢了怎么办 取了高铁票丢了怎么办 高铁买了学生票没带学生证怎么办 买的学生票超过区间怎么办 买了超过区间的学生票怎么办 火车票大于学生票购买区间怎么办 买了学生票学生证丢了怎么办 取票学生证没带怎么办 学生卡的失磁怎么办 学生证没有充磁买不了学生票怎么办 买学生票不在优惠区间怎么办 火车票学生优惠次数用完怎么办 学生乘火车优惠磁卡丢了怎么办 磁卡锁的卡丢了怎么办 电梯磁卡扣丢了怎么办 买火车票手机号填错了怎么办 买火车票乘客身份核验失败怎么办 火车票不在一个车厢怎么办站票 坐火车丢东西了怎么办 g2坐过站了怎么办 坐火车买近了怎么办