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

简介:

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)")
复制代码

运行结果:


相关文章
|
11天前
|
存储 监控 Swift
Swift 属性
10月更文挑战第29天
22 2
|
5月前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
215 4
Swift开发——属性检查器
|
5月前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
39 0
Swift开发——存储属性与计算属性
|
6月前
|
安全 Swift iOS开发
【Swift开发专栏】Swift中的属性观察者与KVO
【4月更文挑战第30天】Swift编程语言支持属性观察者(`willSet`和`didSet`)和键值观察(KVO)来响应属性变化。属性观察者在设置前(`willSet`)和设置后(`didSet`)执行代码,可用于数据绑定。KVO是Cocoa/Cocoa Touch中的机制,需`NSObject`子类和`@objc dynamic`属性配合使用。注意在观察者销毁前移除观察,以避免内存问题。示例展示了属性观察者实现简单数据绑定。
84 1
|
6月前
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
95 1
|
4月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
141 3
|
15天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
31 1
|
24天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
46 5