IOS系列swift语言之课时六

这节课需要讲的就是协议,方法,委托模式(依赖倒转)

代码刷起中......

  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
原文地址:https://www.cnblogs.com/lhh-njq-best/p/6117910.html