Swift 类的使用class
/*
类属性的介绍
Swift中类的属性有多种
1.存储属性:存储示例的常量和变量
2.计算属性:通过某种方式计算出来的属性
3.类属性:与整个类自身相关的属性
存储属性
存储属性是最简单的属性,它作为类实例的一部分,用于存储常量和变量
可以给存储属性提供一个默认值,也可以在初始化方法中对其进行初始化
*/
class Student{
//存储属性
var name:String = ""
var mathScore:Double=0.0
var chineseScore:Double=0.0
//计算属性-->只读属性
var averageScore:Double{
return (chineseScore+mathScore)*0.5
}
//类属性:和整个类相关的属性,并且是通过类名进行访问
static var courseCount:Int=0
// //给类扩充函数
// func getAverageScore()->Double {
// return (chineseScore+mathScore)*0.5
// }
}
let stu=Student()
stu.name="jack"
stu.mathScore=80
stu.chineseScore=90
Student.courseCount=2
print(stu.averageScore)
/*
监听类属性的改变
*/
class Person{
var name:String = "aa" {
//选择其中之一即可
//监听属性即将发生改变,还没有改变
willSet{
print("属性即将改变\(name)")
}
//监听属性已经发生改变,已经发生改变
didSet{
print("属性发生改变\(name)")
}
}
var age:Int = 0 {//选择其中之一即可
//监听属性即将发生改变,还没有改变
willSet(newAge2222){
print(newAge2222)
print("属性即将改变\(age)")
}
//监听属性已经发生改变,已经发生改变
didSet(oldAge1){
print(oldAge1)
print("属性发生改变\(age)")
}
}
}
let p = Person()
p.name="jack"
p.age=100
/*
类的构造函数
*/
class Person2{
var name:String = ""
var age:Int = 0
init(dict:[String:Any]) {
if let name = dict["name"] as? String {
self.name=name
}
if let age = dict["age"] as? Int {
self.age=age
}
}
}
let p2 = Person2(dict: ["name":"jack","age":18])
print(p2.name,p2.age)
/*
使用KVC
1.必须继承自NSObject
2.必须在构造函数中,先调用suepr.init()
3.调用setValuesForKeys
4.如果字典中某一个key没有对应的属性,则需要重写setValue forUndefinedKey方法
*/
class Person3:NSObject{
@objc var name:String = ""
@objc var age:Int = 0
// MARK:- 自定义构造函数
override init() {
}
init(dict:[String:Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
// override func setValue(_ value: Any?, forKey key: String) {
// //print(key)
// }
//重写析构函数,监听对象的销毁
deinit{
print("对象销毁")
}
}
let p3 = Person3(dict: ["name":"jack22","age":28,"phoneNum":"+86 110"])
print(p3.name,p3.age)