IOS系列swift语言之课时六
这节课需要讲的就是协议,方法,委托模式(依赖倒转)
代码刷起中......
//
// 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语言之课时六的更多相关文章
- IOS系列swift语言之课时二
今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...
- IOS系列swift语言之课时八
这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...
- IOS系列swift语言之课时三
今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...
- IOS系列swift语言之课时七
这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...
- IOS系列swift语言之课时五
过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...
- IOS系列swift语言之课时四
今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...
- iOS之Swift语言的学习
好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...
- iOS使用Swift语言检查并提示更新
项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
随机推荐
- 基于Angularjs+jasmine+karma的测试驱动开发(TDD)实例
简介(摘自baidu) 测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法.它要求在编写某个功能的代码之前先编写测试代码,然 ...
- linux查找日志技巧
对于从事web开发的人员来说.服务器上的日志多如牛毛,如何快速从中找出所需信息非常重要,以下是我在工作中用到的查找日志的简单命令,希望能对您有所帮助: 工具/原料 linux SecureCR ...
- 仿造w3school的试一试功能,实现左侧编辑框,右侧效果页面
转自http://fhqllt.iteye.com/blog/836186 每次想快速测试页面效果的时候,特别是在学习前端代码的时候,就想到W3school的那个试一试功能,一直都是用他们那个在线的版 ...
- 自学python3随笔--连接数据库和写EXCEL文件实现
近日在自学python3,选择python,是由于它命令比较简单,语法也不算复杂,对我来说,要实现的功能用100行语句就能够实现.另外,一个原因,它是脚本形式的,调试比较方便,对我这些有很长时间没有写 ...
- SignalR 2.0 初次使用说明
如何使用SignalR 2.0 一:首先通过Nuget安装SignalR 2.0 [本人使用的时候最新版本为2.0]2.0与之前1.X有部分命名空间和配置不同请注意 二:建一个专门的类库用来负责Sig ...
- .NET跨AppDomain访问对象
什么是AppDomain? 我们都知道windows进程,它起到应用程序隔离的作用,带来的好处是,当某个进程发生错误的时候,不会影响其他的进程,系统也不会受到影响.但是,创建windows进程的代价是 ...
- mongoDB数据库
1.mongoDB简介:mongoDB 为非关系数据库,集合(collection)关系数据库中的表,中存储的为json结构的文档,集合中的每一条记录都可以结构不同, 但必须都有_id字段(mongo ...
- 木马轮播图代码Jq
效果图(将就一下) <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- The source attachment does not contain the source for the file ActionSupport.class 错误
报错 Syntax error, insert ";" to complete FieldDeclaration 报错 The source attachment does ...
- Js根据Ip地址自动判断是哪个城市
var province = '' ;var city = '' ;jQuery.getScript("http://int.dpool.sina.com.cn/iplookup/iploo ...