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

代码刷起中......

 //
// main.swift
// ExAndProtocol
//
// Created by David on 23/11/2016.
// Copyright © 2016 DavidIOS. All rights reserved.
// import Foundation
//extension Double {
// var km: Double {
// return self * 1000
// }
//}
//
//let d: Double = 5
//print(d.km) /* 协议中属性的说明
1.只指定属性的名字与类型,不指定是否是存储与计算属性
2.只能在协议中用static修饰静态属性。但在实现类型可以用class 也可以用static
3.只读属性 var a: Int {get}
4.读写属性var b: Int {get set}
5.协议中的属性总是用var声明的 , 但是在实现时可以实现为let 方法的说明
1.不需要大括号
2.支持可变长度参数
3.默认值不能在协议中指明
4.静态方法也用static修饰(在协议中)
5.协议中得方法可以添加mutating,在类中得实现中,可以不需要mutating,在值类型
中得实现中就必须加mutating */ protocol User {
func getName() -> String
var p: Int {get}
var p2: Int {get set}
}
//class UserInfo: User {
// func getName() -> String {
// return "xxx"
// }
//
//
//} //let u: User = UserInfo() //protocol A {
// var p: Int {get set}
//}
//
//protocol B {
// var p2: Int {get set}
//}
//
//class ABImpl : A,B {
//
// var p: Int = 0
// var p2: Int {
// get{
// return p
// }
// set{
// p = newValue
// }
// }
//
//}
//func test(a: A & B) {
// print(a.p)
//}
//test(a: ABImpl()) protocol TableDelegate {
func generateHeader() -> String
func generateRow() -> String
} class OneRowAndColumn: TableDelegate {
func generateHeader() -> String {
let header = "<tr><td>名字</td></tr>"
return header
} func generateRow() -> String {
let row = "<tr><td>xxx</td></tr><tr><td>yyyy</td></tr>"
return row
}
} class TwoRowAndColumn: TableDelegate {
func generateHeader() -> String {
let header = "<tr><td>id</td><td>名字</td></tr>"
return header
} func generateRow() -> String {
let row = "<tr><td>1</td><td>xxx</td></tr><tr><td>2</td><td>yyyy</td></tr>"
return row
}
}
class Table {
let delegate: TableDelegate
init(delegate: TableDelegate) {
self.delegate = delegate
}
func generateTable() -> String {
let str = "<table>" + delegate.generateHeader() + delegate.generateRow() + "</table>"
return str
} }
//let firstDelegate = TwoRowAndColumn()
//let secondDelegate = OneRowAndColumn()
//let table = Table(delegate: secondDelegate)
//print(table.generateTable()) struct UserBean {
let id: Int
let name: String
} protocol UserDaoInf { //女朋友标准
func insert(userInfo: UserBean) -> Bool //标准1
}
class UserDao: UserDaoInf{ //满足女朋友标准的一类人
func insert(userInfo : UserBean) -> Bool {
print("inserting......")
print(userInfo.id)
return true
}
} class UserService {
let dao: UserDaoInf
init (dao: UserDaoInf) { //找到女朋友
self.dao = dao
}
func insert(userInfo: UserBean) -> Bool {
return dao.insert(userInfo: userInfo)
}
}
let userbean = UserBean(id: , name: "")
let userdao: UserDaoInf = UserDao()
let userService = UserService(dao: userdao)
userService.insert(userInfo: userbean) /*
所谓委托模式(依赖倒转)
1.创建一个接口
2.创建一个类型实现接口
3.有一个类,里面很可能是一个属性,其类型为第一步
的接口,属性名一般为delegate */ protocol AA {
func m()
} class A : AA {
func m() { }
}
class B: AA {
func m() { }
} extension AA {
func n() { }
} let a = A()
let b = B()
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. [转]windows 短文件名/短路径名规则

    How Windows Generates 8.3 File Names from Long File Names Windows generates short file names from lo ...

  2. flume整合kafka

    # Please paste flume.conf here. Example: # Sources, channels, and sinks are defined per # agent name ...

  3. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

  4. 后台数据库读取Html值 到前台显示不了样式

    @Html.Raw(FieldValue) 像一些Html代码 传到前台编译不了,直接显示出来 FieldValue 是后台传过来的值 viewBag

  5. MyBatis的应用

    a)首先先导入固定的jar包 b)添加mybatis配置文件mybatis-config.xml 1.添加mybatis配置文件mybatis-config.xml <?xml version= ...

  6. .vimrc vim 配置大全

    map <F9> :call SaveInputData()<CR>func! SaveInputData() exec "tabnew" exec 'no ...

  7. neutron debug

    neutron port-list neutron port-delete neutron floatingip-list neutron floatingip-delete

  8. UVA 11809 - Floating-Point Numbers

    数学太渣了,这道题反复参考了大神的博客,算是看懂了吧.博客原文  http://blog.csdn.net/crazysillynerd/article/details/43339157 算是个数学题 ...

  9. 更换win7锁屏壁纸

    1.打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Backgroun ...

  10. IO操作概念。同步、异步、阻塞、非阻塞

    “一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作. 同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO. 阻塞IO和非阻塞IO的区别在于第 ...