类 协议 代理设计模式
import Foundation
//类:具有相同特征和行为的事物的抽象
//根据类创建的实例就是:对象
//类的创建格式
/*
class 类名: 父类 {
属性
行为
}
*/
//人类:Person 属性:姓名 年龄 性别 行为:吃饭 睡觉
//NSobject 也是Swift中所有类的根类(基类)
class Person: NSObject {
//属性
//方案一 直接给初始值
//swift中不允许非可选类型的属性不赋初始值
// var name: String = ""
//方案二在初始化方法中,给属性赋值
// var name:String
// init(name:String) {
// self.name = name
// }
//方案三 定义成可选类型
// var name:String?
//方案四(定义成隐式解析类型 最常用)
var name:String!
var age:Int!
var gender:String!
//类型属性
static var color:String!
//提供一个快速创建对象的初始化方法
init(name:String,age:Int,gender:String) {
self.name = name
self.age = age
self.gender = gender
}
//行为(方法)
func eat() {
print("男人吃吧吃吧不是罪")
}
func sleep() {
print("好好睡觉 天天向上")
}
//类方法
static func dadoudou(){
print("打豆豆")
}
}
//创建一个对象
let p = Person(name: "男哥", age: 16, gender: "女")
print(p.name,p.age,p.gender)
p.eat()
p.sleep()
//访问类属性
Person.color = "黄色"
print(Person.color)
//调用类方法
Person.dadoudou()
class Student: Person {
var number:Int!
func study() {
print("过四级")
}
//重写从父类继承过来的方法
override func eat() {
super.eat()
print("吃满汉全席")
}
}
let stu = Student(name: "景甜", age: 25, gender: "女")
stu.number = 11011
stu.study()
print(stu.name,stu.age,stu.gender)
stu.eat()
stu.sleep()
// 协议 代理设计模式
//oc下的协议
@objc protocol GirlDelegate{
//协议中只写函数的声明
func makeMoney() //必须实现的方法
//选择实现的方法
@objc optional func wish()
@objc optional func cook()
@objc optional func doHousework()
}
class Girl: NSObject {
//设置代理属性
var delegate:GirlDelegate!
//女孩想买东西
func buySomething() {
//,男朋友挣钱
self.delegate.makeMoney()
}
//女孩饿了
func hungry(){
//男朋友做饭
self.delegate.cook!()
}
//女孩有脏衣服
func youzangyifu(){
//男朋友洗衣服
self.delegate.wish!()
}
//女孩家里脏了
func clearHome(){
//男孩做家务
self.delegate.doHousework!()
}
}
//遵循协议
class Boy : NSObject, GirlDelegate {
func makeMoney() {
print("一天1000块")
}
func cook() {
print("法式小甜点")
}
func wish() {
print("手洗")
}
func doHousework() {
print("找保洁")
}
}
let nanGe = Girl()
let LiYiFeng = Boy()
//给代理属性赋值
nanGe.delegate = LiYiFeng
//男哥发号指令
nanGe.buySomething()
nanGe.hungry()
nanGe.youzangyifu()
nanGe.clearHome()
/*
代理设计模式的步骤
1.设计协议
2.设置代理属性
3.遵循协议
4.实现协议中的方法
5.在外界指定代理属性(给代理属性赋值)
6.告诉代理对象什么时候干活
*/
/*作业:制定一个保姆的协议
{
做家务
做饭
照顾孩子
}
设计Hostess 发出协议
设置保姆类 遵循协议
*/
/*
@objc protocol HostessDelegate{
func doHousework()
@objc optional func cook()
@objc optional func lookafterBaby()
}
class Hostess:NSObject{
//设置代理属性
var delegate:HostessDelegate!
//Rose家里脏了
func jializangle(){
//Lady做家务
self.delegate.doHousework()
}
//Rose饿了
func hungry(){
//Lady 做饭
self.delegate.cook!()
}
//Rose孩子哭了
func babyCry(){
//Lady看孩子
self.delegate.lookafterBaby!()
}
}
//遵循协议
class Boonne:NSObject,HostessDelegate {
func doHousework() {
print("做家务")
}
func cook(){
print("做饭")
}
func lookafterBaby() {
print("看孩子")
}
}
//给代理属性赋值
let Rose = Hostess()
let Lady = Boonne()
Rose.delegate = Lady
Rose.jializangle()
Rose.hungry()
Rose.babyCry()
*/
//Swift中协议格式,协议中的方法都是必须实现的
//1.定义协议
protocol HostessDelegate {
func doHousework()
func cook()
func takeCareBaby()
}
//2.定义代理属性
class hostess: NSObject {
var delegate:HostessDelegate!
//6.通知代理什么时候干活
func cleanHome(){
self.delegate.doHousework()
}
func hungry(){
self.delegate.cook()
}
func working(){
self.delegate.takeCareBaby()
}
}
//给NSobject扩充方法
extension NSObject {
func sayHellow() {
print("你好,集宁师范")
}
}
class Nanny: NSObject {
}
let n = Nanny()
n.sayHellow()
//延展:用来扩充一个类,主要用来管理类的方法,或遵循某个协议中的方法
//3.遵循协议
extension Nanny : HostessDelegate{
//4.实现协议中的方法
func doHousework() {
print("做家务")
}
func cook() {
print("做饭")
}
func takeCareBaby() {
print("照顾小孩")
}
}
let cuiHua = hostess() //女主人
let ruHua = Nanny() //保姆
//5给代理属性赋值
cuiHua.delegate = ruHua
cuiHua.cleanHome()
cuiHua.working()