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

代码刷起中......

 //
// 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. oracle基础备份和还原

    #全库备份 buffer inctype=complete file=c:\mminfo.dmp log=c:\mminfo.log #用户备份:用户mminfo下的所有表 buffer owner= ...

  2. [SQL]查询表里的字段名

    Select Name from syscolumns Where ID=OBJECT_ID('表名') select * from information_schema.tables WHERE T ...

  3. 01-C#入门(函数一)

    只有在动手写代码的时候,才能真正理解到代码的逻辑思想,所以,开始写代码吧. 函数的意义:降低相同功能的代码重复编写,提高重复代码的维护效率. 函数 一个文件由命令空间(namespace).类(cla ...

  4. XE6 & IOS开发之开发者账号、苹果证书(2):关于苹果证书

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 1.关于苹果证书. 注意 ...

  5. 修复HTTP 503错误

    要解决此问题,按照下列步骤操作: 1.验证是否已为虚拟服务器配置了应用程序池.默认的应用程序池是MSSharePointPortalAppPool. 请按照下列步骤来确定虚拟服务器正在使用的应用程序池 ...

  6. AX7: Get started developing

    This blog will show how you can start making a customization in AX 7 by showing you the steps needed ...

  7. js的事件的绑定

    js的绑定事件 绑定事件有什么用,当你一个按钮点击时需要执行2个函数,就可以用绑定事件,一般只有没绑定事件增加两个onclick函数,第二会覆盖第一个函数的. <!DOCTYPE html> ...

  8. 习课省市区的三级联动(cxselect的使用)

    1,api:http://www.jq22.com/jquery-info32382,demo:http://blog.csdn.net/luo201227/article/details/38844 ...

  9. 移动web开发实践-css3(1)盒模型display:-webkit-box;的使用

    提到移动布局不得不提到盒模型display:-webkit-box;这个属性,在移动布局中浮动已经不在重要,相反自适应成为主要的需求,所以display:-webkit-box;变得尤为重要. box ...

  10. ReactNative win10初体验

    根据RN中文网上的文档搭建环境,有的地方说的不是很清楚,所以小白的我搞了很久,终于搭建成功,这里分享一下 1. java: jdk和jre,我下载的是1.8(因为官方文档上说AndroidStudio ...