Swift基础04
2016-05-01 21:21
295 查看
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 */
相关文章推荐
- Swift基础03
- Swift基础02
- Swift--入门
- Swift基础01
- 04_Swift2基础之类型安全和类型推测+字面量+类型别名
- iOS学习笔记48-Swift(八)反射
- iOS学习笔记48-Swift(八)反射
- Swift3.0为视图添加旋转动画_CABasicAnimation
- swift自定义转场动画(比较有难度)
- 02_Swift2基础之常量和变量+注释+分号
- swift2.0 学习笔记eight
- Swift之数组&字典&元组
- iOS学习笔记47-Swift(七)泛型
- iOS学习笔记47-Swift(七)泛型
- Swift 闭包(block)传值
- 对照Java学习Swift--方法(Methods)
- 【Swift学习】Swift编程之旅---方法(十五)
- 对照Java学习Swift--属性 (Properties)
- Swift之字符串的介绍
- iOS学习笔记46-Swift(六)扩展