zoukankan      html  css  js  c++  java
  • IOS系列swift语言之课时六

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

    代码刷起中......

      1 //
      2 //  main.swift
      3 //  ExAndProtocol
      4 //
      5 //  Created by David on 23/11/2016.
      6 //  Copyright © 2016 DavidIOS. All rights reserved.
      7 //
      8 
      9 import Foundation
     10 //extension Double   {
     11 //    var km: Double {
     12 //        return self * 1000
     13 //    }
     14 //}
     15 //
     16 //let d: Double = 5
     17 //print(d.km)
     18 
     19 /* 协议中属性的说明
     20  1.只指定属性的名字与类型,不指定是否是存储与计算属性
     21  2.只能在协议中用static修饰静态属性。但在实现类型可以用class 也可以用static
     22  3.只读属性 var a: Int {get}
     23  4.读写属性var b: Int {get set}
     24  5.协议中的属性总是用var声明的 , 但是在实现时可以实现为let
     25  
     26  方法的说明
     27  1.不需要大括号
     28  2.支持可变长度参数
     29  3.默认值不能在协议中指明
     30  4.静态方法也用static修饰(在协议中)
     31  5.协议中得方法可以添加mutating,在类中得实现中,可以不需要mutating,在值类型
     32  中得实现中就必须加mutating
     33 
     34  
     35  */
     36 
     37 
     38 protocol User {
     39     func getName() -> String
     40     var p: Int {get}
     41     var p2: Int {get set}
     42 }
     43 //class UserInfo: User {
     44 //     func getName() -> String {
     45 //        return "xxx"
     46 //    }
     47 //
     48 //    
     49 //}
     50 
     51 
     52 //let u: User = UserInfo()
     53 
     54 
     55 //protocol A {
     56 //    var p: Int {get set}
     57 //}
     58 //
     59 //protocol B {
     60 //    var p2: Int {get set}
     61 //}
     62 //
     63 //class ABImpl : A,B {
     64 //    
     65 //    var p: Int  = 0
     66 //    var p2: Int {
     67 //        get{
     68 //            return p
     69 //        }
     70 //        set{
     71 //            p = newValue
     72 //        }
     73 //    }
     74 //
     75 //}
     76 //func test(a: A & B)  {
     77 //    print(a.p)
     78 //}
     79 //test(a: ABImpl())
     80 
     81 protocol TableDelegate {
     82     func generateHeader() -> String
     83     func generateRow() -> String
     84 }
     85 
     86 class OneRowAndColumn: TableDelegate {
     87     func generateHeader() -> String {
     88         let header = "<tr><td>名字</td></tr>"
     89         return header
     90     }
     91     
     92     func generateRow() -> String {
     93         let row = "<tr><td>xxx</td></tr><tr><td>yyyy</td></tr>"
     94         return row
     95     }
     96 }
     97 
     98 
     99 class TwoRowAndColumn: TableDelegate {
    100     func generateHeader() -> String {
    101         let header = "<tr><td>id</td><td>名字</td></tr>"
    102         return header
    103     }
    104     
    105     func generateRow() -> String {
    106         let row = "<tr><td>1</td><td>xxx</td></tr><tr><td>2</td><td>yyyy</td></tr>"
    107         return row
    108     }
    109 }
    110 class Table {
    111     let delegate: TableDelegate
    112     init(delegate: TableDelegate) {
    113         self.delegate = delegate
    114     }
    115     func generateTable() -> String {
    116         let str = "<table>" + delegate.generateHeader() + delegate.generateRow() + "</table>"
    117         return str
    118     }
    119     
    120    
    121 }
    122 //let firstDelegate = TwoRowAndColumn()
    123 //let secondDelegate = OneRowAndColumn()
    124 //let table = Table(delegate: secondDelegate)
    125 //print(table.generateTable())
    126 
    127 struct UserBean  {
    128     let id: Int
    129     let name: String
    130 }
    131 
    132 protocol UserDaoInf { //女朋友标准
    133     func insert(userInfo: UserBean) -> Bool //标准1
    134 }
    135 class UserDao: UserDaoInf{ //满足女朋友标准的一类人
    136     func insert(userInfo : UserBean) -> Bool {
    137         print("inserting......")
    138         print(userInfo.id)
    139         return true
    140     }
    141 }
    142 
    143 class UserService {
    144     let dao: UserDaoInf
    145     init (dao: UserDaoInf)  { //找到女朋友
    146         self.dao = dao
    147     }
    148     func insert(userInfo: UserBean) -> Bool {
    149         return dao.insert(userInfo: userInfo)
    150     }
    151 }
    152 let userbean = UserBean(id: 5, name: "555")
    153 let userdao: UserDaoInf = UserDao()
    154 let userService =  UserService(dao: userdao)
    155 userService.insert(userInfo: userbean)
    156 
    157 
    158 /*
    159  所谓委托模式(依赖倒转)
    160  1.创建一个接口
    161  2.创建一个类型实现接口
    162  3.有一个类,里面很可能是一个属性,其类型为第一步
    163  的接口,属性名一般为delegate
    164  
    165  
    166  
    167  */
    168 
    169 
    170 protocol AA {
    171     func m()
    172 }
    173 
    174 class A : AA {
    175     func m() {
    176         
    177     }
    178 }
    179 class B: AA  {
    180     func m() {
    181         
    182     }
    183 }
    184 
    185 extension AA {
    186     func n() {
    187         
    188     }
    189 }
    190 
    191 let a = A()
    192 let b = B()
    193 b
  • 相关阅读:
    引用数据类型:字符串和数组
    java流程控制
    java基本类型-八大基本数据类型(4类8种)
    Java标识符
    Java注释
    虚拟环境管理virtualenv
    pipenv管理模块和包
    有关线程的说法?
    TCP三次握手的序列号和确认号的计算
    jenkins的安装
  • 原文地址:https://www.cnblogs.com/lhh-njq-best/p/6117910.html
Copyright © 2011-2022 走看看