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

    过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等

    直接刷代码了.......

      1 //: Playground - noun: a place where people can play
      2 
      3 import UIKit
      4 //1.所有的值类型是不能继承的
      5 //2.目前为止所有的类型(除了Class)都是值类型
      6 //   比如String,数组,字典
      7 //3. swift中是单继承
      8 //4.官方文档中从来没有说所有类会继承于Object
      9 //5.swift目前的版本是没有抽象类,也没有抽象方法
     10 //6。重写时注意方法的名字,一定要加override
     11 //final:就是阻止被重写
     12 //class Parent {
     13 //    var p = 0
     14 //    func a(){
     15 //        print("parent a ")
     16 //    }
     17 //    
     18 //    //b(first:)
     19 //    func b(first a: Int) {
     20 //        
     21 //    }
     22 ////
     23 ////    //b(second:)
     24 ////    func b(second a: Int)  {
     25 ////        
     26 ////    }
     27 //    
     28 //    final func c() {
     29 //        
     30 //    }
     31 //}
     32 //
     33 //class Child: Parent {
     34 //    
     35 //    //父类是一个存储属性,但子类重写成了一个计算属性
     36 //    //原因是:子类不知道父类的属性到底是存储还是计算属性
     37 //    //        它只知道属性的名字和类型
     38 ////    override var p: Int {
     39 ////        get {
     40 ////            return 5
     41 ////        }
     42 ////        set {
     43 ////            print("asdfasf")
     44 ////        }
     45 ////        
     46 ////    }
     47 //    
     48 //    override var p: Int {
     49 //        didSet {
     50 //            print("p didset")
     51 //        }
     52 //    }
     53 //     override func a() {
     54 //        print("child a ")
     55 //    }
     56 //    
     57 //   
     58 //
     59 //    func b(ss a: Int) {
     60 //        
     61 //    }
     62 //}
     63 //
     64 //let ins: Parent  = Child()
     65 //ins.a()
     66 //ins.p = 666
     67 //ins.c()
     68 
     69 //**************初始化******************************
     70 //1.初始化是确保一个类型的实例可以使用之前,其所有存储属性都得到正确的赋值
     71 //struct  FirstStruct {
     72 //    let a = 0
     73 //    let b: Int
     74 //    let c: Int
     75 //    var cp: Int {
     76 //        return 5
     77 //    }
     78 //}
     79 ////关于结构,编译器会自动帮我们生成memberwise的初始化器
     80 //
     81 //let fs =  FirstStruct(b: 1, c: 2)
     82 
     83 
     84 /*** 存储属性要么在声明的时候赋值要么就在init中赋值  ***/
     85 struct  FirstStruct {
     86     let a = 0
     87     let b: Int = 6
     88     let c: Int
     89     init() {
     90        // c = 1
     91         //在init中可以调用其它的init,但必须加上self
     92         //第二个init只能在init中调用
     93         self.init(c: 1)
     94         
     95     }
     96     init(c: Int) {
     97         self.c = c
     98     }
     99     
    100 }
    101 //let ins = FirstStruct()
    102 class Parent {
    103     var name: String
    104     var height: Int
    105     //没有特殊的修饰符的init就是专门的(Designated init)初始化器,主要的作用就是确保 “所有的”存储属性得到初始化
    106     //一般只有一个,可以有多个
    107     init(name: String,height: Int ) {
    108         self.name = name
    109         self.height = height
    110     }
    111     
    112     //便利初始化器是方便创建对象使用,它必须直接或间接调用专门初始化器
    113    convenience init(name: String) {
    114         self.init(name: name, height: 175)
    115     }
    116     convenience init() {
    117         self.init(name: "weimingming")
    118     }
    119 }
    120 let p = Parent()
    121 p.name
    122 p.height
    123 //构造器编写的基本套路
    124 //1.一般是只写一个专门的初始化器,用来实例化所有的存储属性
    125 //2.可以添加任意多个便利初始化器,来直接或间接调用专门的初始化器
    126 //3.子类也一般只创建一个专门的初始化器,用来初始化
    127 //本类的所有存储属性
    128 //4.子类的专门初始化器,必须调用父类的专门初始化器
    129 //5.子类的便利初始化器,必须调用(委派,delegate)自己的专门初始化器
    130 
    131 class Child: Parent {
    132     var age: Int
    133     init(age: Int){
    134         self.age = age
    135         super.init(name: "hexin", height: 178)
    136         self.name = "xxxx"
    137     }
    138     
    139     //子类的便利初始化器,必须委派(delegate)到自己的专门初始化器
    140     convenience init() {
    141         //self.init(age: 18)
    142        
    143         self.init(age: 18)
    144     }
    145 }
    146 //
    147 let c = Child()
    148 c.name
    149 c.age
    150 c.height
    151 //小结:1.自己的便利一定要调用自己的专门的初始化器
    152 //2.自己的专门初始化一定要调用父类的专门
    153 
    154 
    155 
    156 
    157 /*********** Failable init**/
    158 class Test {
    159     var name = ""
    160     init?(name: String) {
    161         if name.isEmpty {
    162             return nil
    163         }
    164         self.name = name
    165     }
    166 }
    167 
    168 class Test2: Test {
    169     override init(name: String) {
    170        
    171         super.init(name: name)!
    172     }
    173 }
    174 let t = Test(name: " ")
    175 if t == nil {
    176     print("nil.......")
    177 }
    178 
    179 
    180 //enum Gender {
    181 //    case male,female
    182 //    init?(xingbie: String) {
    183 //        switch xingbie {
    184 //        case "f":
    185 //            self = .female
    186 //        case "m":
    187 //            self = .male
    188 //        default:
    189 //            return nil
    190 //        }
    191 //    }
    192 //}
    193 //
    194 //let g = Gender.male
    195 //let g2 = Gender(xingbie: "xxx")
    196 //if g2 == nil {
    197 //    print("xxx  不能转换为一个枚举值")
    198 //}
    199 
    200 
    201 enum Gender: String {
    202     case Male = "M",Female
    203 }
    204 
    205 let g3 = Gender(rawValue: "M")
    206 if g3 == nil {
    207     print("xxx 不是枚举值")
    208 }
    209 /* Required init  *****/
    210 class Test3 {
    211     var name = ""
    212     //required表明此初始化器,子类必须重写(但不需要有override)子类也必须加上requried,表明子类的子类也需要重写
    213     required init(name: String) {
    214         self.name = name
    215         print("test3 init...")
    216     }
    217 }
    218 
    219 class Test4: Test3 {
    220     let age : Int
    221     init(age: Int) {
    222         self.age = age
    223         super.init(name: "asfd")
    224     }
    225     
    226     required  init(name: String) {
    227        self.age = 18
    228        print("test3 init...")
    229         super.init(name: name)
    230     }
    231 }
    232 
    233 
    234 let t4 = Test4(age: 55)
    235 
    236 
    237 class LaJi  {
    238     var name = "aaa"
    239     deinit{
    240         print("清理工作")
    241     }
    242 }
    243 //var lji: LaJi? = LaJi()
    244 //lji = nil
    245 
    246 func xx() {
    247     let lll = LaJi()
    248     lll.name = "bbbb"
    249 
    250 }
    251 xx()
  • 相关阅读:
    Fast exit from dram self-refresh
    关于Net开发中一些SQLServer性能优化的建议
    收集一些优秀的DoNet开源项目
    收集一些优秀的DoNet开源项目
    收集一些优秀的DoNet开源项目
    LINQ表达式用法整理
    LINQ表达式用法整理
    LINQ表达式用法整理
    SQL 拼接多个字段的值&一个字段多条记录的拼接
    你应该知道的jQuery技巧【收藏】
  • 原文地址:https://www.cnblogs.com/lhh-njq-best/p/6117897.html
Copyright © 2011-2022 走看看