iOS中 Swift初级入门学习(三)

 

iOS中 Swift初级入门学习(三) 


[plain]  view plain  copy
  1. //  
  2. //  main.swift  
  3. //  LessonSwift-03  
  4. //  
  5.   
  6. //  Copyright (c) 2015年 韩俊强. All rights reserved.  
  7. //  
  8.   
  9. import Foundation  
  10.   
  11. // 声明一个类, 我们用class关键字修饰  
  12. // 类可以被继承, 它是引用类型  
  13. class Student {  
  14.     var name = "小米"  
  15.     var gender = "男"  
  16.     var age = 18  
  17. }  
  18. // 创建一个student实例  
  19. let studnet = Student()  
  20. let student2 = studnet  
  21. // 如何判断两个实例是否一样  
  22. if studnet === student2{  
  23.     println("两个实例一样, 都操作的同一块内存")  
  24. }else{  
  25.     println("两个实力不一样")  
  26. }  
  27.   
  28. // 在类中,判断两个实力是否相等, 用 === ,不相等用 !==  
  29. let student3 = Student()  
  30. if student3 !== studnet {  
  31.     println("不一样")  
  32. }else{  
  33.     println("一样")  
  34. }  
  35.   
  36. // 声明结构体我们用struct关键字  
  37. struct Person {  
  38.     var name : String  
  39.     var age : Int  
  40. }  
  41. var person = Person(name: "小妹妹", age: 19)  
  42. var person2 = person  
  43. // 结构体中,不能判断两个实例是否相等  
  44. //if person === person2 {  
  45. //  
  46. //}  
  47.   
  48. // 属性  
  49. // 根据调用对象的不同, 属性可以分为类属性, 还有实例类型属性  
  50. // 根据功能的不同, 属性可以分为存储属性 和 计算属性  
  51. struct Animal {  
  52.     // 这两个属性是对象来调用的, 是实例属性  
  53.     // 这两个属性是用来存储值的, 是存储属性  
  54.     var typeName : String  
  55.     var isFly : Bool  
  56. }  
  57. // 创建一个实例  
  58. var dog = Animal(typeName: "泰迪", isFly: false)  
  59. // 该属性的作用是存储值, 调用的对象是实例  
  60. dog.typeName = "藏獒"  
  61. println(dog.isFly)  
  62.   
  63.   
  64. class Human {  
  65.     var name : String!  
  66.     var age : Int!  
  67.       
  68.     // 延迟存储属性  
  69.     // 延迟存储属性用lazy修饰, 而且必须是可变的, 也就是说要用var 来修饰变量, 还要给初值, 什么时候创建, 就和我们oc中的懒加载一样  
  70.     lazy var cat : Animal = Animal(typeName: "波斯猫", isFly: true)  
  71.       
  72. }  
  73. let aHumen = Human()  
  74. // 调用该属性的时候, 才会被创建  
  75. aHumen.cat.typeName = "加菲猫"  
  76. println(aHumen.cat.typeName)  
  77.   
  78. // 计算属性  
  79. class CoolPerson {  
  80.     var name : String!  
  81.     var age : Int!  
  82.       
  83.     // 有set get方法, 或者只有get方法的属性叫做计算属性, 计算属性不能给属性赋值, 只能给其他属性赋值  
  84.     var countProperty : String{  
  85.         set {  
  86.             // newValue 就是系统在set方法中为我们提供的一个新值, 也就是我们给该属性赋的值  
  87.             println(newValue)  
  88.             name = newValue  
  89.   
  90.         }  
  91.         get {  
  92.             // 把值给我们的计算属性  
  93.             return "\(name)" + "好帅"  
  94.         }  
  95.     }  
  96. }  
  97. let 小妹妹 = CoolPerson()  
  98. 小妹妹.countProperty = "朱丽叶"  
  99. println(小妹妹.name)  
  100. println(小妹妹.countProperty)  
  101.   
  102.   
  103.   
  104. class Teacher {  
  105.     var name = "小花"  
  106.     var age = 19  
  107.     // 只有get方法的属性就叫只读属性, 不能给该属性赋值  
  108.     var gender : String {  
  109. //        get {  
  110. //            return "男"  
  111. //        }  
  112.         // 简洁写法  
  113.         return "男"  
  114.     }  
  115. }  
  116. // 创建一个实例  
  117. let 小花 = Teacher()  
  118. //小花.gender = "女"  
  119.   
  120. // 属性观察器  
  121. class Bird {  
  122.     var isFly : Bool!  
  123.     var age : Int! {  
  124.       
  125.     willSet {  
  126.     // 属性将要被赋值的时候会走的方法  
  127.     // newValue 是新值  
  128.     println("newValue = \(newValue)")  
  129.       
  130.     }  
  131.     didSet {  
  132.     // 属性已经被赋值的时候会走该方法  
  133.     println("oldValue = \(oldValue)")  
  134.       
  135.        }  
  136.    }  
  137. }  
  138. let aBird = Bird()  
  139. aBird.age = 19  
  140.   
  141.   
  142. // 类属性  
  143. struct Desk {  
  144.     // 结构体中的属性我们用static修饰  
  145.     // 结构体中的类属性, 我们要给它赋初始值  
  146.     static var price : Float = 2  
  147.     static var numbers : Int = 1  
  148.     static var totalPrice : Float {  
  149.         set {  
  150.         // newValue 的类型和 totalPrice一致  
  151.             numbers = Int(newValue)  
  152.         }  
  153.         get {  
  154.             return Float(numbers) * price  
  155.               
  156.         }  
  157.     }  
  158. }  
  159. // 类属性通过类名调用  
  160. Desk.numbers = 10  
  161. println("总价格 == \(Desk.totalPrice) 元")  
  162.   
  163.   
  164. // 类的类属性  
  165. class Fruit {  
  166.     // 类的类属性用class关键字来修饰, 并且只能修饰计算属性  
  167.     class var name : String {  
  168.     get {  
  169.     return "hello"  
  170.     }  
  171.      
  172.    }  
  173. }  
  174. println(Fruit.name)  
  175.   
  176. // 方法  
  177. // 按照调用对象的不同, 方法可以分为类方法和实例方法  
  178. class Plane {  
  179.     // 实例方法  
  180.     func canFly() {  
  181.         println("我会飞")  
  182.     }  
  183. }  
  184. let plan = Plane()  
  185. plan.canFly()  
  186.   
  187. struct Ship {  
  188.     // 实例方法  
  189.     func canShip() {  
  190.         println("我会在水里跑")  
  191.     }  
  192. }  
  193. let ship = Ship()  
  194. ship.canShip()  
  195.   
  196. // 类方法  
  197. struct Man {  
  198.     // 结构体中的类方法, 我们用static来修饰  
  199.     static func playLOL() {  
  200.         println("男人喜欢LOL")  
  201.     }  
  202. }  
  203. // 通过 类名.方名 的方式调用类方法  
  204. Man.playLOL()  
  205. // 类中的类方法我们用class来修饰, 通过 类名.方法名 的方式来调用  
  206. class Women {  
  207.     class func shopping() {  
  208.         println("败家")  
  209.     }  
  210. }  
  211.   
  212. // 继承  
  213. // 没有继承类叫基类, 也叫做超类  
  214. class YaPei {  
  215.     var name = "亚培"  
  216.     var age = 23  
  217.     var description : String {  
  218.         println("\(name) 年龄 \(age) 喜欢逛淘宝")  
  219.         return "\(name) 年龄 \(age) 喜欢逛淘宝"  
  220.     }  
  221.     // 如果一个类的属性或者方法不想被继承, 我们可以在方法或者属性前面加关键字 final , 如果整个类都不想被继承 就在 class前面加 关键字 final  
  222.    final func infoOfYaPei(){  
  223.         println("这是个基类的方法");  
  224.     }  
  225. }  
  226. class SonOfYaPei: YaPei {  
  227.       
  228.     // 不能重写存储属性  
  229. //    override var name = "小花"  
  230.     // 我们只能重写计算属性, 用override来修饰  
  231.     override var description : String {  
  232.         return "\(name) 的子类"  
  233.     }  
  234. //    override func infoOfYaPei() {  
  235. //        println("重写了父类的方法,这是子类的方法")  
  236. //    }  
  237.       
  238. }  
  239. let pei = YaPei()  
  240. println(pei.description)  
  241. pei.infoOfYaPei()  
  242.   
  243.   
  244. // 构造方法  
  245. class Monkey {  
  246.     var name : String  
  247.     var gender : String  
  248.     var age : Int  
  249.     // 构造方法, 通过构造方法我们要保证每一个没有值的属性被赋值  
  250.     init(name : String,age : Int,gender : String) {  
  251.         // 如果属性名和参数名一样, 这个时候我们的属性名前面一定要加self  
  252.         // 我们要确保调用过构造方法以后, 该实例的每一个属性都有值  
  253.         self.name = name  
  254.         self.gender = gender  
  255.         self.age = age  
  256.     }  
  257. }  
  258. let 孙悟空 = Monkey(name: "悟空", age: 8, gender: "未知")  
  259. println((孙悟空.name,孙悟空.age,孙悟空.gender))  
  260.   
  261. class 金刚 : Monkey {  
  262.     var hobby : String  
  263.     // 必须在调用父类的构造方法前, 先给子类的没有赋值的属性赋值  
  264.     init(name: String, age: Int, gender: String,hobby : String) {  
  265.     self.hobby = hobby  
  266.     super.init(name: name, age: age, gender: gender)  
  267.         
  268.     }  
  269. }  
  270.   
  271. let AC = 金刚 (name: "猴子`", age: 12, gender: "nan", hobby: "玩耍")  
  272.   
  273. // 析构  
  274. class BadEgg {  
  275.     var shape : String!  
  276.     var color : String!  
  277.     // 析构方法类似于OC里面的dealloc 方法, 当实例的引用计数器为0的时候会走的方法  
  278.     deinit {  
  279.         println("egg --- dead")  
  280.     }  
  281.       
  282. }  
  283. // 创建一个实例  
  284. var anEgg : BadEgg? = BadEgg()  
  285. var anotherEgg : BadEgg? = BadEgg()  
  286. anEgg = nil  
  287. anotherEgg = nil  
  288.   
  289. // 自动引用计数机制  
  290. // 在Swift当中也是使用自动引用计数机制来管理内存(ARC)  
  291. // 引用技术机制仅仅应用于类的实例, 而结构体是值类型, 有不同的方式来存储和传递值, 结构体没有引用计数机制  
  292. // Swift直接使用ARC, 会在类的实例不再使用的时候走deinit(析构)方法  
  293. // Swift中的ARC机制: 这块空间如果只是一个指针指向, 那么我们把这个指针置为nil, 这块空间就会释放掉, 如果有多个指针指向, 那么我们需要把所有的真想这块空间的指针置为nil,这块空间才会释放 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值