1.类的定义:
class 类名 :父类(可以没有父类) {
属性,和方法
}
事例:
class Person : NSObject{
var age:Int = 0
//override 重写 方法 那么字典中没有的字典可以在类中没有对应的属性
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
}
let p = Person()
p.age = 20
//p.setvalusForKeysWithDictionary(["age":18])
// 类的定义属性
// 1.存储属性:存储实例的常量和变量
class Student : NSObject {
var age = 0
var name:String? //可选类型 默认为nil
var mathScore : Double = 0.0
var chinaseScore:Double = 0.0
// 定义一个方法可以返回平均成绩
func getAverageScore() -> Double {
// 在swift开发中,如果使用当前对象的某一个属性,或者调用当前对象的某一个方法时,可以直接使用,不需要加self
return (mathScore + chinaseScore)*0.5
}
// 计算属性 swift 建议用计算属性
var avg:Double {
return (mathScore + chinaseScore)*0.5
}
// 定义类属性:
static var courseCount:Int = 0
}
// 给类属性赋值
Student.courseCount = 2
let stu = Student()
stu.age = 10
stu.name = "LM"
stu.mathScore = 78
stu.chinaseScore = 59.9
print(stu.age)
if let name = stu.name {
print(name)
}
let avg = (stu.mathScore + stu.chinaseScore)*0.5
stu.getAverageScore()
print(stu.avg)
2.类的构造函数与属性监听
2.1类的构造函数
class Person: NSObject {
var name:String?
var age = 0
// 父类方法
override init() {
//在构造函数中,如果没有调用 super.init() ,那么系统会帮助调用
super.init()
print("chongxie")
}
//自定义构造函数
init(name:String,age:Int) {
self.name = name
self.age = age
}
// init(dict:[String : AnyObject]) {
// let tempName = dict["name"]
//
// ////as?最终转成的类型时一个可选的类型
// name = tempName as? String
// //as!最终转成的类型时一个确定的类型
//// age = tempage as! Int
//
// if let tempage = dict["age"] as? Int {
// age = tempage
// }
//
//
// }
init(dict:[String:AnyObject]) {
super.init()
// self.setValuesForKeysWithDictionary(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
}
let p = Person()
let p1 = Person(name:"why",age:18)
print(p1.age)
let p2 = Person(dict: ["name":"LM" as AnyObject,"age":18 as AnyObject])
2.2监听属性的变化
class Person : NSObject {
var name : String? {
//属性将要改变时进行监听
willSet{
// print(name)
print(newValue)
}
//属性已经改变时进行监听
didSet {
// print(name)
print(oldValue)
}
}// 属性监听器
}
let p = Person()
p.name = "LM"