//類 協(xié)議? 代理設(shè)計(jì)模式 閉包
import Foundation
//類:具有相同特征和行為的事物抽象
//根據(jù)類創(chuàng)建的實(shí)例就是對象
//類的創(chuàng)建格式
/*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!
//提供一個(gè)快速創(chuàng)建對象的初始化放法
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("打豆豆")
}
}
//創(chuàng)建一個(gè)對象
let p = Person(name: "韓沉", age: 26, gender: "男")
print(p.name,p.age,p.gender)
p.eat()
p.sleep()
//訪問類屬性
Person.color = "黃色"
print(Person.color)
//調(diào)用類方法
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()
//協(xié)議? 代理設(shè)計(jì)模式
//oc下的協(xié)議
@objc protocol GirlDelegate {
//協(xié)議中只寫函數(shù)的聲明
func makeMoney()//必須實(shí)現(xiàn)的方法
//選擇實(shí)現(xiàn)的方法
@objc optional func wish()
@objc optional func cook()
@objc optional func doHousework()
}
class Girl: NSObject {
//設(shè)置代理屬性
//女孩想買東西男朋友掙錢
var delegate:GirlDelegate!
func buySomething(){
//男朋友掙錢
self.delegate.makeMoney()
}
//女孩餓了
func hungry()? {
self.delegate.cook!()
}
//女孩有臟衣服
func youZangyifu()? {
self.delegate.wish!()
}
//女孩家里臟了
func clearHome()? {
self.delegate.doHousework!()
}
}
//遵循協(xié)議
class Boy: NSObject,GirlDelegate {
func makeMoney() {
print("一天1000元")
}
func cook() {
print("甜點(diǎn)")
}
func wish() {
print("手洗")
}
func doHousework() {
print("找保潔")
}
}
let suMian = Girl()
let hanchen = Boy()
//給代理屬性賦值
suMian.delegate = hanchen
//sumian發(fā)號(hào)施令
suMian.buySomething()
suMian.hungry()
suMian.youZangyifu()
suMian.clearHome()
/**
代理設(shè)計(jì)模式的步驟
1.設(shè)計(jì)協(xié)議
2.設(shè)置代理屬性
3.遵循協(xié)議
4.實(shí)現(xiàn)協(xié)議中的方法
5.在外界指定代理屬性(給代理屬性賦值)
6.告訴代理對象什么時(shí)候干活
*/
//制定一個(gè)保姆的協(xié)議{做飯,做家務(wù),照顧孩子
}
//設(shè)計(jì)一個(gè)Hostess 發(fā)出協(xié)議 設(shè)置一個(gè)保姆類 遵循協(xié)議
*/
//swift中的協(xié)議代理格式,協(xié)議中的方法都是必須實(shí)現(xiàn)的
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擴(kuò)充方法
extension NSObject{
func sayHello()? {
print("你好濟(jì)寧師范")
}
}
class Nanny: NSObject{
}
let n = Nanny()
n.sayHello()
//延展:用來擴(kuò)充一個(gè)類,主要用來管理類的方法或者遵循某個(gè)協(xié)議中的方法
//3.遵循協(xié)議
extension Nanny : HostessDelegate{
//4.實(shí)現(xiàn)協(xié)議中的方法
func doHousework() {
print("做家務(wù)")
}
func cook() {
print("做飯")
}
func takeCarebaby() {
print("照顧小孩")
}
}
let cuiHua = Hostess()
let ruHua = Nanny()
//給代理屬性賦值
cuiHua.delegate = ruHua
cuiHua.clearHome()
cuiHua.erLe()
cuiHua.haiZi()