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()

 

posted @ 2015-12-21 21:32  NingSpeals  阅读(389)  评论(0编辑  收藏  举报