这节课需要讲的就是协议,方法,委托模式(依赖倒转)
代码刷起中......
1 // 2 // main.swift 3 // ExAndProtocol 4 // 5 // Created by David on 23/11/2016. 6 // Copyright © 2016 DavidIOS. All rights reserved. 7 // 8 9 import Foundation 10 //extension Double { 11 // var km: Double { 12 // return self * 1000 13 // } 14 //} 15 // 16 //let d: Double = 5 17 //print(d.km) 18 19 /* 协议中属性的说明 20 1.只指定属性的名字与类型,不指定是否是存储与计算属性 21 2.只能在协议中用static修饰静态属性。但在实现类型可以用class 也可以用static 22 3.只读属性 var a: Int {get} 23 4.读写属性var b: Int {get set} 24 5.协议中的属性总是用var声明的 , 但是在实现时可以实现为let 25 26 方法的说明 27 1.不需要大括号 28 2.支持可变长度参数 29 3.默认值不能在协议中指明 30 4.静态方法也用static修饰(在协议中) 31 5.协议中得方法可以添加mutating,在类中得实现中,可以不需要mutating,在值类型 32 中得实现中就必须加mutating 33 34 35 */ 36 37 38 protocol User { 39 func getName() -> String 40 var p: Int {get} 41 var p2: Int {get set} 42 } 43 //class UserInfo: User { 44 // func getName() -> String { 45 // return "xxx" 46 // } 47 // 48 // 49 //} 50 51 52 //let u: User = UserInfo() 53 54 55 //protocol A { 56 // var p: Int {get set} 57 //} 58 // 59 //protocol B { 60 // var p2: Int {get set} 61 //} 62 // 63 //class ABImpl : A,B { 64 // 65 // var p: Int = 0 66 // var p2: Int { 67 // get{ 68 // return p 69 // } 70 // set{ 71 // p = newValue 72 // } 73 // } 74 // 75 //} 76 //func test(a: A & B) { 77 // print(a.p) 78 //} 79 //test(a: ABImpl()) 80 81 protocol TableDelegate { 82 func generateHeader() -> String 83 func generateRow() -> String 84 } 85 86 class OneRowAndColumn: TableDelegate { 87 func generateHeader() -> String { 88 let header = "<tr><td>名字</td></tr>" 89 return header 90 } 91 92 func generateRow() -> String { 93 let row = "<tr><td>xxx</td></tr><tr><td>yyyy</td></tr>" 94 return row 95 } 96 } 97 98 99 class TwoRowAndColumn: TableDelegate { 100 func generateHeader() -> String { 101 let header = "<tr><td>id</td><td>名字</td></tr>" 102 return header 103 } 104 105 func generateRow() -> String { 106 let row = "<tr><td>1</td><td>xxx</td></tr><tr><td>2</td><td>yyyy</td></tr>" 107 return row 108 } 109 } 110 class Table { 111 let delegate: TableDelegate 112 init(delegate: TableDelegate) { 113 self.delegate = delegate 114 } 115 func generateTable() -> String { 116 let str = "<table>" + delegate.generateHeader() + delegate.generateRow() + "</table>" 117 return str 118 } 119 120 121 } 122 //let firstDelegate = TwoRowAndColumn() 123 //let secondDelegate = OneRowAndColumn() 124 //let table = Table(delegate: secondDelegate) 125 //print(table.generateTable()) 126 127 struct UserBean { 128 let id: Int 129 let name: String 130 } 131 132 protocol UserDaoInf { //女朋友标准 133 func insert(userInfo: UserBean) -> Bool //标准1 134 } 135 class UserDao: UserDaoInf{ //满足女朋友标准的一类人 136 func insert(userInfo : UserBean) -> Bool { 137 print("inserting......") 138 print(userInfo.id) 139 return true 140 } 141 } 142 143 class UserService { 144 let dao: UserDaoInf 145 init (dao: UserDaoInf) { //找到女朋友 146 self.dao = dao 147 } 148 func insert(userInfo: UserBean) -> Bool { 149 return dao.insert(userInfo: userInfo) 150 } 151 } 152 let userbean = UserBean(id: 5, name: "555") 153 let userdao: UserDaoInf = UserDao() 154 let userService = UserService(dao: userdao) 155 userService.insert(userInfo: userbean) 156 157 158 /* 159 所谓委托模式(依赖倒转) 160 1.创建一个接口 161 2.创建一个类型实现接口 162 3.有一个类,里面很可能是一个属性,其类型为第一步 163 的接口,属性名一般为delegate 164 165 166 167 */ 168 169 170 protocol AA { 171 func m() 172 } 173 174 class A : AA { 175 func m() { 176 177 } 178 } 179 class B: AA { 180 func m() { 181 182 } 183 } 184 185 extension AA { 186 func n() { 187 188 } 189 } 190 191 let a = A() 192 let b = B() 193 b