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

代码刷起中......

  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. protocol User {
  37. func getName() -> String
  38. var p: Int {get}
  39. var p2: Int {get set}
  40. }
  41. //class UserInfo: User {
  42. // func getName() -> String {
  43. // return "xxx"
  44. // }
  45. //
  46. //
  47. //}
  48.  
  49. //let u: User = UserInfo()
  50.  
  51. //protocol A {
  52. // var p: Int {get set}
  53. //}
  54. //
  55. //protocol B {
  56. // var p2: Int {get set}
  57. //}
  58. //
  59. //class ABImpl : A,B {
  60. //
  61. // var p: Int = 0
  62. // var p2: Int {
  63. // get{
  64. // return p
  65. // }
  66. // set{
  67. // p = newValue
  68. // }
  69. // }
  70. //
  71. //}
  72. //func test(a: A & B) {
  73. // print(a.p)
  74. //}
  75. //test(a: ABImpl())
  76.  
  77. protocol TableDelegate {
  78. func generateHeader() -> String
  79. func generateRow() -> String
  80. }
  81.  
  82. class OneRowAndColumn: TableDelegate {
  83. func generateHeader() -> String {
  84. let header = "<tr><td>名字</td></tr>"
  85. return header
  86. }
  87.  
  88. func generateRow() -> String {
  89. let row = "<tr><td>xxx</td></tr><tr><td>yyyy</td></tr>"
  90. return row
  91. }
  92. }
  93.  
  94. class TwoRowAndColumn: TableDelegate {
  95. func generateHeader() -> String {
  96. let header = "<tr><td>id</td><td>名字</td></tr>"
  97. return header
  98. }
  99.  
  100. func generateRow() -> String {
  101. let row = "<tr><td>1</td><td>xxx</td></tr><tr><td>2</td><td>yyyy</td></tr>"
  102. return row
  103. }
  104. }
  105. class Table {
  106. let delegate: TableDelegate
  107. init(delegate: TableDelegate) {
  108. self.delegate = delegate
  109. }
  110. func generateTable() -> String {
  111. let str = "<table>" + delegate.generateHeader() + delegate.generateRow() + "</table>"
  112. return str
  113. }
  114.  
  115. }
  116. //let firstDelegate = TwoRowAndColumn()
  117. //let secondDelegate = OneRowAndColumn()
  118. //let table = Table(delegate: secondDelegate)
  119. //print(table.generateTable())
  120.  
  121. struct UserBean {
  122. let id: Int
  123. let name: String
  124. }
  125.  
  126. protocol UserDaoInf { //女朋友标准
  127. func insert(userInfo: UserBean) -> Bool //标准1
  128. }
  129. class UserDao: UserDaoInf{ //满足女朋友标准的一类人
  130. func insert(userInfo : UserBean) -> Bool {
  131. print("inserting......")
  132. print(userInfo.id)
  133. return true
  134. }
  135. }
  136.  
  137. class UserService {
  138. let dao: UserDaoInf
  139. init (dao: UserDaoInf) { //找到女朋友
  140. self.dao = dao
  141. }
  142. func insert(userInfo: UserBean) -> Bool {
  143. return dao.insert(userInfo: userInfo)
  144. }
  145. }
  146. let userbean = UserBean(id: , name: "")
  147. let userdao: UserDaoInf = UserDao()
  148. let userService = UserService(dao: userdao)
  149. userService.insert(userInfo: userbean)
  150.  
  151. /*
  152. 所谓委托模式(依赖倒转)
  153. 1.创建一个接口
  154. 2.创建一个类型实现接口
  155. 3.有一个类,里面很可能是一个属性,其类型为第一步
  156. 的接口,属性名一般为delegate
  157.  
  158. */
  159.  
  160. protocol AA {
  161. func m()
  162. }
  163.  
  164. class A : AA {
  165. func m() {
  166.  
  167. }
  168. }
  169. class B: AA {
  170. func m() {
  171.  
  172. }
  173. }
  174.  
  175. extension AA {
  176. func n() {
  177.  
  178. }
  179. }
  180.  
  181. let a = A()
  182. let b = B()
  183. b

IOS系列swift语言之课时六的更多相关文章

  1. IOS系列swift语言之课时二

    今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...

  2. IOS系列swift语言之课时八

    这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...

  3. IOS系列swift语言之课时三

    今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...

  4. IOS系列swift语言之课时七

    这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...

  5. IOS系列swift语言之课时五

    过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...

  6. IOS系列swift语言之课时四

    今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...

  7. iOS之Swift语言的学习

    好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...

  8. iOS使用Swift语言检查并提示更新

    项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...

  9. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

随机推荐

  1. sklearn学习笔记2

    Text classifcation with Naïve Bayes In this section we will try to classify newsgroup messages using ...

  2. sklearn学习笔记1

    Image recognition with Support Vector Machines #our dataset is provided within scikit-learn #let's s ...

  3. oleDB 导入excel遇到的问题

    本地测试一切ok. 到服务器上测试各种报错,先装了office2010,又装了AccessDatabaseEngine,之后报"Microsoft Excel 不能访问文件 可能的原因有: ...

  4. grub4dos

    default 1 timeout 5 gfxmenu (hd0,0)/grub/message configfile #####以上不在第一分区无法加载 title HITSZ_COMMAND co ...

  5. oracle kill session

    kill session 是DBA经常碰到的事情之一.如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生.同时也应当注意,如果kill 的session属于 ...

  6. unity3d加载默认工程秒退怎么办

    加载Unity3D工程时出现秒退, 怎么尝试都没有用(已经确定了项目路径名称全部为英文). 然后就再也没办法打开Unity3D了,因为一打开它就会默认加载上回的工程. 解决办法: 把最后一次加载的工程 ...

  7. Unsupported major.minor version 51.0解决办法

    问题: 之前使用的是高版本的myeclipse2015ci,然后换成了myeclipse10.5,之前的workspace的内容没有改变,结果工程都出现了感叹号,运行时提示 Unsupported m ...

  8. 使用jenkins 插件自动部署项目至tomcat

    前面使用maven.ant编译项目就不说,只说一下使用jenkins的插件自动部署项目 1.首先jenkins安装插件Deploy to container Plugin ,下载地址为:https:/ ...

  9. copy elision

    http://book.51cto.com/art/200810/93007.htm 1.2.2  数据传送指令 mov:数据移动.第一个参数是目的,第二个参数是来源.在C语言中相当于赋值号.这是最广 ...

  10. arrayList的合并以及删除重复元素

    arrayList的合并: package listTest;//arrayList的合并 import java.util.ArrayList; public class arrayListTest ...