// Person.swift
import Foundation
//类是一类物体的共有性抽象
//对象是某一类的一个具体
class Person:NSObject {
//类里面一般由属性跟方法构成的
//定义属性:
// var name:String = "胡小东"
// var age:Int = 60
//必选类型的初始化
var name:String
var age:Int
//可选类型初始化
var grade:String?
var count:Int?
//override表示该方法是从父类继承过来的
//外部使用"类名()"方式创建对象就会默认调用下面该方法
overrideinit() {
//必选类型(不是可选类型)的初始化一定要在调用初始化方法之前完成
name ="胡小东"
age =50
super.init()// 调用父类的初始化方法(必须)
}
//该方法是为了解决字典里面的一些key值,在该模型里面没有导致的系统崩溃
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
}
}
// Animal.swift
import Foundation
//重载构造函数
class Animal:NSObject {
var age:Int =0
var type:String?
//重载构造函数
init(age:Int, type:String) {
super.init()
//如果参数列表参数名字跟类的属性名一样,需要使用self调用
self.age = age
self.type = type
}
//如果重载了构造方法同事没有写上系统默认的构造方法,外界无法访问到该类的构造方法
overrideinit() {
super.init()
}
}
// main.swift
import Foundation
//在swift里面引用其他我们自定义的类不用导入头文件,可以直接使用
//面向过程:注意功能实现的一个过程
//面向对象:注意实现功能所要参与的对象
//创建Person对象
//类名()代表该类调用系统默认的实例化方法
let person0 = Person()
//访问对象的属性采用点语法
println(person0.name)
println(person0.age)
//属性值在该类中定义为var时,可修改其属性值
person0.name ="胡小乐"
person0.age =70
println(person0.name)
println(person0.age)
//给可选类型的属性进行赋值操作
person0.grade ="五年级"
person0.count =5
println(person0.grade!)
println(person0.count!)
//给有重载构造函数类的属性进行赋值
let animal0 = Animal(age:2, type: "dog")
println(animal0.age)
println(animal0.type!)
let student0 = Students(stuNo:1, stuName: "胡小东", stuAge:20)
let class0 = Classes(cNo:"1001", cName: "软件141", peopleCount:40)
println("\(student0.stuNo!),\(student0.stuName!),\(student0.stuAge!)")
println("\(class0.cNo!),\(class0.cName!),\(class0.peopleCount!)")
//键值编码:KVC(key-value-coding)
//是一种通过字符串间接访问对象属性的一种方法
let animal1 = Animal()
animal1.setValue("horse", forKey:"type")//key要跟你要设置的属性的名字一样
//在进行KVC赋值的时候,类的属性如果是基本数据类型的话不能是可选类型,必须有一个初始值
animal1.setValue(12, forKey:"age")
println(animal1.type!)
println(animal1.age)
let animal2 = Animal()
let dict = ["type":"monkey","age":5]
//animal2.setValue(dict["type"], forKey: "type")
//animal2.setValue(dict["age"], forKey: "age")
//setValuesForKeysWithDictionary:(keyedValues:[NSObject:AnyObject]):会将字典中的key跟对象属性的名字进行对比,如果一样,将key对应的value设置到对象的属性上,会在底层重复调用setValue(value, forKey:key)
animal2.setValuesForKeysWithDictionary(dict)
println(animal2.type!)
println(animal2.age)