zoukankan      html  css  js  c++  java
  • Swift中enum, struct, class的有关使用方法

      1 import Foundation
      2 
      3 print("Hello, World!")
      4 
      5 let a = 10
      6 var b = 20
      7 var c = a + b;
      8 c = 3000
      9 
     10 //重载:函数名相同, 函数类型不同(参数, 返回值不同), 构成重载, 调用的时候, 根据参数确定调用那个函数
     11 func helloworld(a:Int)->Int {
     12     return a * 100
     13 }
     14 func hellowold(a:String)->Int {
     15     return 100
     16 }
     17 print(hellowold("123"))
     18 
     19 //for 循环
     20 //区间0...10 = [0, 10]  0..<10 = [0, 10)
     21 for i in 0...10 {
     22     print("i = (i)")
     23 }
     24 
     25 //1.枚举
     26 //2.类 和 结构
     27 
     28 //定义枚举值
     29 enum Direction : String {
     30     case East = ""
     31     case West = "西"
     32     case South = ""
     33     case North = ""
     34 }
     35 
     36 //定义变量接受枚举值
     37 //如果给一个变量赋值过一次枚举值, 下次赋值可以直接使用.进行赋值
     38 var dir = Direction.East
     39 print(dir)
     40 
     41 var dir2 = dir
     42 dir = .North
     43 print("dir = (dir.rawValue), dir2 = (dir2.rawValue)")
     44 
     45 //枚举值的原始值
     46 enum Season: Int{
     47     case Spring = 100
     48     case Snmmer
     49     case Fall
     50     case Winter
     51 }
     52 
     53 var se = Season.Spring
     54 //rawValue, 原始值
     55 print(se.rawValue)
     56 
     57 //通过枚举值的原始值找到枚举值
     58 let sea = Season(rawValue: 100)
     59 print(sea)
     60 
     61 //隐式解析
     62 if let s = sea {
     63     print("s = (s)")
     64 } else {
     65     print("无法找到枚举值")
     66 }
     67 
     68 enum Student: String{
     69     case Primary = "小学"
     70     case junior
     71     case senior
     72     case university
     73 }
     74 
     75 var stu = Student.Primary
     76 print(                                                                                                                                                                                                                                                                                                                                                                                                                                    stu.rawValue)
     77 
     78 let student = Student(rawValue:"小学")
     79 print(student)
     80 
     81 if let st = student {
     82     print("st = (st)")
     83 } else {
     84     print("无法找到枚举值")
     85 }
     86 
     87 
     88 enum FourFlower : String {
     89     case 闯神 = "尼古拉斯·闯"
     90     case 龙神 = "龙神"
     91     case 宗主 = "宗主"
     92     case 半张 = "半张"
     93 }
     94 
     95 let flower = FourFlower.闯神.rawValue
     96 print("闯神(flower)")
     97 
     98 //类 和 结构体
     99 struct Person{
    100     var height = 1.8
    101     var weight = 75
    102     var age = 25
    103 }
    104 
    105 //实例结构体化
    106 //()就是结构体的一个初始化方法
    107 var 广恩 = Person()
    108 print(广恩.weight)
    109 广恩.weight = 90
    110 print("广恩的体重 = (广恩.weight)KG")
    111 
    112 
    113 //逐一构造器
    114 //构造 = alloc...init = 初始化
    115 //析构 = dealloc = 释放
    116 var 康康 = Person (height: 178, weight: 70, age: 23)
    117 
    118 let str = "康康的身高为(康康.height), 体重为(康康.weight)" + ", 年龄为(康康.age)"
    119 print(str)
    120 
    121 var 李阳 = 康康
    122 康康.height = 180
    123 print("李阳.height = (李阳.height)")
    124 
    125 //
    126 class Student1{
    127     var num = 12345
    128     var name = "万宝"
    129     var GoodFriend = "闯神"
    130 }
    131 
    132 //系统没有给类自动添加逐一构造器
    133 var 万少 = Student1()
    134 万少.GoodFriend = "越南"
    135 print(万少.GoodFriend)
    136 
    137 var 龙神 = 万少
    138 万少.GoodFriend = "Xcode"
    139 print(龙神.GoodFriend)
    140 
    141 //A = B
    142 //值类型 : 赋值完成以后, B 修改, A不变. 枚举值 和 结构体就是值类型. 类似 copy 的过程
    143 //引用类型 : 赋值完成以后, B 修改, A 随着 B 改变, 类就是引用类型. 类似 retain 的过程
    144 
    145 //属性
    146 //存储属性:用来存值和取值
    147 //计算属性:计算属性的值通过 GET 方法, 用其他因素获取, set方法一般用来处理事务. 只写 GET, 这个属性是只读的; 不能只写 set
    148 class Animal {
    149     //存储属性
    150     var type = "Elephant"
    151     var weigh = 1000
    152     //计算属性
    153     var leg : Int {
    154         get {
    155             if type == "Elephant" {
    156                 return 4
    157             } else if type == "bird" {
    158                 return 2
    159             } else {
    160                 return 3
    161             }
    162         }
    163         //set 方法需要一个 新值 参数
    164         set(newValue){
    165             if(newValue >= 4){
    166                 print("不可能是人")
    167             } else {
    168                 print("有可能是人")
    169             }
    170         }
    171     }
    172 }
    173 
    174 var per = Animal()
    175 per.type = "老人"
    176 print("per.leg = (per.leg)")
    177 
    178 per.leg = 10
    179 print("per.leg = (per.leg)")
    180 
    181 //练习
    182 //1.定义一个名字为rect的结构体
    183 //2.属性包括 存储属性, x, y, with, height  计算属性 centerX, centerY
    184 //3.centerX 和 centerY 由存储属性计算得出
    185 //4.centerX 和 centerY 的 set 方法内分别依据 x/y 和 新值计算width/height
    186 
    187 struct Rect {
    188     
    189     //属性包括 存储属性, x, y, with, height
    190     var x = 0.0
    191     var y = 0.0
    192     var width = 0.0
    193     var height = 0.0
    194     
    195     //在类内部使用属性的时候, 可以省略 self.
    196     //只有涉及到参数名字和属性相同的时候, 建议加上 self.以示
    197     
    198     //计算属性 centerX, centerY
    199     var centerX :Double {
    200         get{
    201             //centerX 和 centerY 由存储属性计算得出
    202             return self.x + self.width/2.0
    203         }set{
    204             //centerX 和 centerY 的 set 方法内分别依据 x/y 和 新值计算width/height
    205             width = (newValue - x)*2
    206         }
    207     }
    208     
    209     
    210     var centerY :Double {
    211         get{
    212             return y + height/2.0
    213         }set{
    214             height = (newValue - y)*2
    215         }
    216     }
    217     
    218 }
    219 
    220 
    221 //属性观察器
    222 class Plant {
    223     
    224     var type = "绿色植物"{
    225         willSet(newType) {
    226             print("newType = (newType), 当前值(type)")
    227         } didSet(oldType) {
    228             print("oldType = (oldType), 当前值(type)")
    229         }
    230     }
    231     
    232     var hasFlower : Bool = false {
    233         willSet {
    234             print("新值为(newValue), 当前值为(hasFlower)")
    235         } didSet {
    236             print("旧值为(oldValue), 当前值为(hasFlower)")
    237         }
    238     }
    239 }
    240 var appleTree = Plant()
    241 appleTree.type = "苹果树"
    242 appleTree.hasFlower = true
    243 
    244 
    245 //类型属性
    246 class Fruit {
    247     //是否有皮
    248     static var hasRind = true
    249 }
    250 
    251 print("水果是否有皮: (Fruit.hasRind)")
    252 
    253 
    254 //方法
    255 class Computer{
    256     var brand = "美帝良心想"
    257     var price = 6888
    258     func des(name:String){
    259         print("(name)买了(brand), 花了¥(price)")
    260     }
    261 }
    262 var compu = Computer()
    263 compu.des("闯神")
    264 
    265 class Car {
    266     var brand = "奥迪"
    267     var color = "黑色"
    268     func TYPE(name:String){
    269         print("(name)买了颜色为(color)的车, 牌子是(brand)")
    270     }
    271 }
    272 var car = Car()
    273 car.TYPE("外星人")
    274 
    275 //继承
    276 //定义父类
    277 class Teacher {
    278     var academic = "教授"
    279     var offer = 8888
    280     func teach(){
    281         print("某(academic)的薪资是(offer)")
    282     }
    283     
    284     //禁止被重写的方法
    285     //final 禁止被重写的关键字
    286     final func study(bookName:String){
    287         print("某(academic),刻苦钻研(bookName)")
    288     }
    289     
    290     var num : Int {
    291         get {
    292             return 100
    293         } set {
    294             
    295         }
    296     }
    297     
    298     
    299 }
    300 
    301 //定义一个子类
    302 //讲师
    303 class Lecturer: Teacher {
    304     var industry = "iOS"
    305     //重写父类方法
    306     //override 重写父类方法关键字
    307     override func teach() {
    308         //调用父类方法
    309         super.teach()
    310         print("从事行业是(industry)")
    311     }
    312 }
    313 let lec = Lecturer()
    314 lec.academic = "两院院士"
    315 lec.teach()
    316 lec.study("<<论持久战>>")
    317 
    318 //重写属性
    319 //把存储属性重写为计算属性
    320 //不能把计算属性重写为存储属性
    321 class ChildrenTeacher:Teacher {
    322     override var offer: Int {
    323         get{
    324             return 10000
    325         } set {
    326             
    327         }
    328     }
    329 //    override  var num = 100
    330 }
    331 
    332 //构造
    333 //除了可选类型属性, 在构造过程中, 必须给各个属性赋初始值
    334 class Hero{
    335     var age :Int?
    336     var name : String
    337     var equipment = "金箍棒"
    338     var saddleHorse : String
    339     init(){
    340         name = "孙悟空"
    341         saddleHorse = "筋斗云"
    342     }
    343     //自定义一个构造方法
    344     init(name:String, equipment:String, saddleHorse:String ){
    345         self.name  = name
    346         self.equipment = equipment
    347         self.saddleHorse = saddleHorse
    348     }
    349 }
    350 let 孙悟空 = Hero()
    351 print(孙悟空.saddleHorse)
    352 let 大禹 = Hero(name: "大禹", equipment: 孙悟空.equipment, saddleHorse: "11路公交")
    353 
    354 class Film {
    355     var name :  String
    356     var price : Float
    357     var director : String
    358     
    359     init (name:String, price:Float, director:String){
    360         self.name = name
    361         self.price = price
    362         self.director = director
    363     }
    364     func description(){
    365         print("电影名字(name), 价格为(price), 导演是(director)")
    366     }
    367     
    368     //遍历构造器
    369     //和 OC 的不是一回事, OC的是 类方法
    370     //convenience 在构造方法前添加 convenience代表当前构造器为便利构造器
    371     //遍历构造器必须调用自身的指定构造器
    372     convenience init(){
    373         self.init(name:"123", price:22, director:"王晶")
    374 //        name = "123"
    375 //        price = 22
    376 //        director = "王晶"
    377     }
    378 }
    379 
    380 let 澳门风云三 = Film(name: "澳门风云三", price: 33, director: "尔冬升")
    381 print(澳门风云三.price)
    382 澳门风云三.description()
    383 
    384 let 恶棍天使 = Film()
    385 恶棍天使.description()
  • 相关阅读:
    开发者和设计师:为何我们不能好好相处?(转载)
    PHP ACCESS
    来自腾讯的session跨域,跨服代码
    php大括号妙用。
    php mysql 记录集的操作
    开始我的代码笔记
    收藏一个php用的一个页码按钮类
    修改过后的数字英文字符生成图片代码
    搜藏一点php session 常用方法
    php包含漏洞收集程序代码
  • 原文地址:https://www.cnblogs.com/wsn1993/p/5064945.html
Copyright © 2011-2022 走看看