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
- Swift基础04
- 【swift基础】04字符串
- Swift教程 swift基础
- swift基础
- Swift 基础
- swift基础
- Swift 基础
- swift基础
- swift基础
- Swift基础
- Swift基础
- swift基础
- swift基础
- Swift基础
- swift基础
- swift 基础
- swift基础
- swift 基础
- sql函数substr
- SINGLETON(单例模式)
- 【19】-快速排序详解
- Android Studio安装在线插件
- hdu 2093
- Swift基础04
- 几种常用的设计模式介绍
- HDU 1754 I Hate It
- 何为莆田系医院?我们怎样判别莆田系医院?
- CSS3之布局(分栏布局、响应式布局)
- 数据挖掘-离群点检测
- 解析XML各种异常
- JAVA _JDK5的特性
- Linux账号管理