import UIKit
一,类的属性定义
1,类的创建(如果不想继承NSObject可以直接把: NSObject去掉)
在对对象内部的属性进行初始化赋值的时候:
一般值类型,像字符串,基本数据类型Int等,直接初始化为空值,“”或者0等
如果是对象类型UIView则初始化为nil,即可选类型
class cat: NSObject{
var name:String = ""{
willSet{
print("即将改变")
}
didSet{
print("已经改变")
}
}
var age:Int = 0
//重写这个方法是为了避免赋值给没有的属性时候报错的情况,但是我这里还不知道内部怎么重写
override func setValue(_ value: Any?, forKey key: String) {
}
}
let p = cat()
p.name = "zhang"
p.name
p.setValuesForKeys(["name":"jack", "age":10, "num":100])
p.name
p.age
let view = UIView()
- 2,类的属性定义(存储属性,计算属性,类属性)
class dog: NSObject{
//普通存储属性的定义
var name:String?//可选类型默认是nil,可以这么复制,但是一般对于值类型复制为空,swift中字符串不是对象类型哦
var keyNum:String = ""//这里是赋值空字符串
var age:Int = 0
var score01:Int = 0
var score02:Int = 0
//取平均值方法一:函数
func average() -> Int {
return (score01 + score02)/2
}
//取平均值方法二:计算属性的定义:把上述的函数直接写成属性->只读属性///用的不多
var average01:Int{
return (score01 + score02)/2
}
//类属性的定义:(所有的对象都有的属性,static修饰)///用的不多
static var tail:Bool = true
}
let d = dog()
d.name = "zhang"
d.keyNum = "123456"
d.age = 20
d.score01 = 40
d.score02 = 80
print(d.name, d.keyNum, d.age)
//如果用的是可选类型,需要进行解包,那么就需要用可选绑定进行操作更好
if let name = d.name{
print(name)
}
//可以直接用函数对属性进行某些操作
d.average()
//但一般情况下用计算属性,如下
d.average01
二,构造函数
(如果自己实现了构造函数,会覆盖原有的构造函数,如果不想要覆盖,需要手动的写出原来的构造函数)
class Person:NSObject{
var name:String = ""
var age:Int = 0
var hobby:String?
//这里是为了保留原有的构造函数方法
override init() {
//在构造函数中如果没有调用父类方法, 系统也会自动调用
super.init()
}
init(name:String, age:Int) {
//加self是为了避免歧义,不然name会就近选择选择init中参数name
self.name = name
self.age = age
}
init(dict:[String:AnyObject]){
// //as?转成可选类型,as!转成固定类型
// name = dict["name"] as! String
// hobby = dict["hobby"] as! String?
// age = dict["age"] as! Int
// let opName = dict["name"] as? String//首先要解包成可选类型(不要强制解包成直接类型)
//用可选绑定进行赋值
// if let name = dict["name"] as? String {
// self.name = name
// }
super.init()
self.setValuesForKeys(dict)
}
//重写这个方法处理字典中没有对应的那些键值
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
}
let person = Person(name: "zhang", age: 10)
person.age
person.name
let person01 = Person(dict: ["age":50 as AnyObject, "name":"zhang" as AnyObject])
person01.name
person01.age
三,类的属性监听
class Student:NSObject{
var name : String? {
//属性监听器的两个方法
willSet{
print("willset")
}
didSet{
print("didset")
}
}
var age:Int? = 0{
willSet{
print(newValue)
}
didSet{
print(oldValue)
}
}
}
let stu = Student()
stu.name = "zhang"
stu.age = 10
stu.age = 230