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很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
随机推荐
- sklearn学习笔记2
Text classifcation with Naïve Bayes In this section we will try to classify newsgroup messages using ...
- sklearn学习笔记1
Image recognition with Support Vector Machines #our dataset is provided within scikit-learn #let's s ...
- oleDB 导入excel遇到的问题
本地测试一切ok. 到服务器上测试各种报错,先装了office2010,又装了AccessDatabaseEngine,之后报"Microsoft Excel 不能访问文件 可能的原因有: ...
- grub4dos
default 1 timeout 5 gfxmenu (hd0,0)/grub/message configfile #####以上不在第一分区无法加载 title HITSZ_COMMAND co ...
- oracle kill session
kill session 是DBA经常碰到的事情之一.如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生.同时也应当注意,如果kill 的session属于 ...
- unity3d加载默认工程秒退怎么办
加载Unity3D工程时出现秒退, 怎么尝试都没有用(已经确定了项目路径名称全部为英文). 然后就再也没办法打开Unity3D了,因为一打开它就会默认加载上回的工程. 解决办法: 把最后一次加载的工程 ...
- Unsupported major.minor version 51.0解决办法
问题: 之前使用的是高版本的myeclipse2015ci,然后换成了myeclipse10.5,之前的workspace的内容没有改变,结果工程都出现了感叹号,运行时提示 Unsupported m ...
- 使用jenkins 插件自动部署项目至tomcat
前面使用maven.ant编译项目就不说,只说一下使用jenkins的插件自动部署项目 1.首先jenkins安装插件Deploy to container Plugin ,下载地址为:https:/ ...
- copy elision
http://book.51cto.com/art/200810/93007.htm 1.2.2 数据传送指令 mov:数据移动.第一个参数是目的,第二个参数是来源.在C语言中相当于赋值号.这是最广 ...
- arrayList的合并以及删除重复元素
arrayList的合并: package listTest;//arrayList的合并 import java.util.ArrayList; public class arrayListTest ...