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

代码刷起中......

 //
// 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. c++中的宏 #define _CLASSDEF(name) class name

    #include <iostream> using namespace std; #define _CLASSDEF(name) class name; \ typedef name * ...

  2. Linux 如何解决 xhost: unable to open display ""

    [root@host02 ~]# vncservice You will require a password to access your desktops. Password: Verify: x ...

  3. Mysql数据库中存储中文为乱码

    1. 修改数据库的编码格式为utf8 2. 修改表的编码格式为utf8 3. 修改字段的编码格式为utf8 祝你好运!

  4. iOS开发 - OC - duplicate symbol _OBJC / undefind symbol 错误的相关处理

    前言: 作为一个iOS开发,相信大家都会遇到类似于 “duplicate symbol” 的程序报错. 对于很多新手来说,可能会有点手足无措,因为这种类型的报错一般并非是代码的逻辑错误,大部分情况下是 ...

  5. U-Boot GOT表分析和u-boot.lds解读

    转自:http://blog.sina.com.cn/s/blog_70dd16910100zab6.html u-boot-2010.09/arch/powerpc/cpu/mpc86xx/star ...

  6. Git学习笔记(一)

    1.git clone https://github.com/miguelgrinberg/flasky.git cd flasky git checkout 1a 2.git reset --har ...

  7. Ambari 不能配置 Kafka 监听host的问题

    问题:Ambari下Kafka多IP监听配置 环境:Ambari 1.7.0 , Hadoop 2.2 Kafka 0.8.1.2.2.0.0 现象: Ambari 中是不能配置Kafka的host. ...

  8. Map小结

    Map主要用于存储健值对个人理解:因为Map是根据键得到值,因此需要保证键值的唯一性,不允许键重复(重复了覆盖了),但允许值重复.1.HashMap根据键的HashCode 值存储数据,根据键可以直接 ...

  9. workplace background

    class:SysSetupFormRun public void run() { super(); this.design().colorScheme(FormColorScheme::RGB); ...

  10. linux 进程的创建

    1. 进程号: 每个进程在被初始化的时候,系统都会为其分配一个唯一标识的进程id,称为进程号: 进程号的类型为pid_t,通过getpid()和getppid()可以获取当前进程号和当前进程的父进程的 ...