写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号。
一、类与结构体
两者在Swift中差不了多少了
 
类与结构体有很多相同的地方: (第2,3点是其他语言中不存在的)
1)都可以定义属性/方法/下标(结构体也可以定义方法了)
2)都能初始化(通过构造方法)
3)都能使用扩展(extension)与协议(protocol)
 
4)类与结构体(枚举)中的全局属性/方法:在类中用class关键字,但在结构体中用static
 
类比结构体多的功能:
1)能继承
2)运行时能检查类对象的类型
3)析构释放资源
4)引用计数允许一个类实例有多个引用
 
- class Person1{  
 
-     var name = "jack"  
 
- }  
 
-   
 
- struct Person2{   
 
-     var age:Int  
 
- }  
 
-   
 
- let p1 = Person1()  
 
- let p2 = Person2(age: 10)  
 
 
 
 
二、属性(存储属性--计算属性--类属性)
 
2.1存储属性: 就是存储一个常量或变量,类似Java中的成员变量
- class Person3{  
 
-     var name:String = "xuneng"  
 
-     var age:Int = 10  
 
-     let height = 175  
 
-     lazy var p1:Person1 = Person1() 
 
- }  
 
-   
 
- var p3 = Person3()  
 
- p3.name   
 
- p3.age = 11   
 
-   
 
- println(p3.p1)   
 
 
 
2.2计算属性: 不直接存储值,而是用get/set来做.可用来操作其他属性值的变化
get: 取, 用来封装取值的过程
set: 设, 用来封装设值的过程
 
- class Person4{  
 
-     var name:String = "jack"  
 
-     var jjLength:Int = 10  
 
-     var age:Int{  
 
-         get{  
 
-             return jjLength * 2  
 
-         }  
 
-         set(newAge){  
 
-             jjLength = newAge / 2  
 
-         }  
 
-     }  
 
- }  
 
- var p4 = Person4()  
 
- p4.age = 10   
 
 
 
 
2.2.1 简便的计算属性写法
- class Person5{  
 
-     
 
-     var jjLength:Int = 10  
 
-     var age:Int{  
 
-         get{  
 
-             return jjLength * 2  
 
-         }  
 
-         set{  
 
-             jjLength = newValue / 2  
 
-         }  
 
-     }  
 
-       
 
-     
 
-     var height:Int{  
 
-         get{  
 
-             return jjLength * 4  
 
-         }  
 
-     }  
 
-       
 
-     var height2:Int{  
 
-         return jjLength * 4  
 
-     }  
 
- }  
 
-   
 
- var p5 = Person5()  
 
- p5.height  
 
 
2.2.2 注意计算属性的死循环情况
计算属性的值是不固定的,因此不能用let修饰,只能用var
计算属性不能直接赋值
 
- class Person6{  
 
-     
 
-     var jjLength:Int = 10  
 
-       
 
-       
 
-     var age:Int{  
 
-         get{  
 
-             return age   
 
-         }  
 
-         set{  
 
-            age = newValue    
 
-         }  
 
-     }  
 
- }  
 
 
 
 
2.3 类属性(或者叫做类型属性)用class关键字修饰.类属性只能是计算属性.
类属性就是类似java中static修饰的属性.一个类只有一份,且多个实例对象共享.可直接用类名调用
- class Person7{  
 
-     class var name:String{  
 
-         return "xuneng"  
 
-     }  
 
- }  
 
- Person7.name  
 
 
 
2.4 属性监视器: 可用来监视属性变化的2个方法willSet, didSet
计算属性因为有get和set方法,因此监视器其实对计算属性没多大用处.对存储属性用处大
初始化值时, 不会调用willSet与didSet
willSet, didSet和set, get不能共存
 
- class Person8{  
 
-     var name:String = "xuneng"{  
 
-         willSet{  
 
-             println("新值为:\(newValue)")    
 
-         }  
 
-         didSet{  
 
-             println("新值为:\(oldValue)")   
 
-         }  
 
-     }  
 
- }  
 
- var p8 = Person8()  
 
- p8.name = "jack"    
 
 
三、函数与方法
 
 
3.1 对象方法
类中的方法与函数的一点区别: 方法的第一个参数以后,全是外部参数.名字即为参数名
- class Person9{  
 
-     func sum(num1:Int , num2:Int){  
 
-         println(num1 + num2)  
 
-     }  
 
- }  
 
- var p9 = Person9()  
 
- p9.sum(10, num2: 10)  
 
 
 
3.2 类方法. 用class修饰
 
- class Person10{  
 
-     class func sum(num1:Int , num2:Int){  
 
-         println(num1 + num2)  
 
-     }  
 
- }  
 
- Person10.sum(10, num2: 10)  
 
 
 
 
3.3 self与super, 与OC相同
- class Person11{  
 
-     func sum(num1:Int , num2:Int){  
 
-         self.fun()   
 
-     }  
 
-       
 
-     func fun(){  
 
-         println("hello")  
 
-     }  
 
- }  
 
 
四、下标(附属脚本)
 
下标, 有的叫附属脚本(subscript), 新东西。
可以定义在 类/结构体/枚举中,进行快速访问。
 
- struct Person12{   
 
-     let jjLength:Int      
 
-       
 
-     subscript(index:Int) -> Int{  
 
-         return jjLength * index  
 
-     }  
 
- }  
 
-   
 
- var p12 = Person12(jjLength: 10)  
 
- p12[3]     
 
 Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等
原文:http://www.cnblogs.com/seth-chen/p/5179770.html