//类 协议 代理设计模式 闭包
import Foundation
//类:具有相同特征和行为的事物抽象
//根据类创建的实例就是对象
//类的创建格式
/*class 类名: 父亲 {
属性
行为
}*/
//人类:Person 属性:姓名,性别,年龄 行为:吃饭,睡觉
//NSObject也是swift中所有的根类(基类)
class Person: NSObject {
//属性
//1
//swift中不允许非可选类型的属性不赋初始值
//直接给初始值
//var name:String = "韩沉"
//2
/* var name:String
//在初始化方法中,给属性赋值
init(name:String){
self.name = name
}*/
//3 属性为可选类型
//var name:String?
//4 隐士解析类型
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: 26, 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: 26, gender: "男")
stu.number = 100101
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 suMian = Girl()
let hanchen = Boy()
//给代理属性赋值
suMian.delegate = hanchen
//sumian发号施令
suMian.buySomething()
suMian.hungry()
suMian.youZangyifu()
suMian.clearHome()
/**
代理设计模式的步骤
1.设计协议
2.设置代理属性
3.遵循协议
4.实现协议中的方法
5.在外界指定代理属性(给代理属性赋值)
6.告诉代理对象什么时候干活
*/
//制定一个保姆的协议{做饭,做家务,照顾孩子
}
//设计一个Hostess 发出协议 设置一个保姆类 遵循协议
*/
//swift中的协议代理格式,协议中的方法都是必须实现的
protocol HostessDelegate{
func doHousework()
func cook()
func takeCarebaby()
}
class Hostess: NSObject{
//定义代理属性
var delegate:HostessDelegate!
func clearHome() {
self.delegate.doHousework()
}
func erLe() {
self.delegate.cook()
}
func haiZi() {
self.delegate.takeCarebaby()
}
}
//给NSObject扩充方法
extension NSObject{
func sayHello() {
print("你好济宁师范")
}
}
class Nanny: NSObject{
}
let n = Nanny()
n.sayHello()
//延展:用来扩充一个类,主要用来管理类的方法或者遵循某个协议中的方法
//3.遵循协议
extension Nanny : HostessDelegate{
//4.实现协议中的方法
func doHousework() {
print("做家务")
}
func cook() {
print("做饭")
}
func takeCarebaby() {
print("照顾小孩")
}
}
let cuiHua = Hostess()
let ruHua = Nanny()
//给代理属性赋值
cuiHua.delegate = ruHua
cuiHua.clearHome()
cuiHua.erLe()
cuiHua.haiZi()