您的位置:首页 > 移动开发 > Swift

Swift面向对象基础(中)——Swift中的存储属性和计算属性

2016-03-11 00:00 746 查看
学习来自《极客学院》

1、存储属性:存储在类、结构体里的变量或者常量

2、分为:实例存储属性、类型存储属性

3、所有的存储属性必须显示的指定初始值,在定义时或者构造器当中指定

4、可选类型的存储属性可以不指定初始值

1 import Foundation  2
3 struct lengthRang {  4  var start:Int  5     //定义常量存储属性,可以不指定初始值
6  let length:Int  7 }  8 //创建结构体的实例变量
9 var len = lengthRang(start: 12, length: 2)  10 println("len的起点为\(len.start),长度为\(len.length)")  11
12 //延迟存储属性:第一次被调用时候才会被计算初始值的属性,用lazy修饰符  13 //当某个实例是一个创建成本比较大的实例的引用的时候,使用延迟存储可以提高程序的性能  14 //延迟存储属性只能被定义成变量,也就是var关键字创建,所以不能用let创建  15
16 //计算属性:就是set和get方法的组合
17 /*语法格式  18 [修饰符] var 计算属性名:属性类型{  19  get{  20  }  21  set(形参名){  22  }  23 }  24 */
25
26 class User {  27     var first:String = ""
28     var last:String = ""
29     //定义计算属性
30  var fullName:String{  31         //定义计算属性的getter方法,该方法的返回值由first、last两个存储属性决定
32         get{  33             return first + "_" + last  34  }  35         //定义计算属性的setter方法
36         set(newValue){  37             var names = newValue.componentsSeparatedByString("_")  38             self.first = names[0]  39             self.last = names[1]  40  }  41  }  42  init(first:String,last:String){  43         self.first = first  44         self.last = last  45  }  46 }  47 //创建一个实例
48 let s = User(first: "heyang", last: "hello")  49 println(s.fullName)  50 s.fullName = "何杨_你好"
51 println(s.fullName)  52 //只读属性,则无需set部分,可以省略get和花括号  53
54
55
56
57 //属性观察者
58 /*
59 1.除了延迟存储属性之外的所有存储属性(包括实例存储属性和类型存储属性)  60 2.可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加属性观察者  61 */
62 //其实属性观察者就是 两个特殊的回调方法
63 /*
64 [修饰符]var 计算属性名:属性类型 = 初始值{  65 wilSet(newValue){  66 //属性即将被赋值之前自动调用的方法  67 }  68 didSet(oldValue){  69 //属性呗赋值完成之后自动调用的方法  70 }  71 }  72 *******参数可以省略*********  73 */
74 class Person {  75     //定义存储属性
76     var name:String = ""{  77  willSet{  78             if(count(newValue)>6) || (count(newValue)<2){  79                 println("您设置的人名字\(newValue)不符合要求,请重新设置")  80             }else{  81                 println("人名符合要求,设置成功")  82  }  83  }  84  didSet{  85             println("人名设置完成,被修改的原名为:\(oldValue)")  86  }  87  }  88     var age:Int = 0{  89  willSet{  90             if newValue>100 || newValue<0{  91                 println("您设置的年龄\(newValue)不符合要求,请重新设置!")  92  }  93             else{  94                 println("年龄设置符合要求,设置成功。")  95  }  96  }  97  didSet{  98             println("年龄设置完成,被修改的年龄为\(oldValue)")  99  } 100  } 101 } 102 //然后是创建实例
103 var p = Person() 104 p.name = "张三"
105 p.age = 21
106 println("\(p.name)")


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: