博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift面向对象基础(中)——Swift中的存储属性和计算属性
阅读量:6847 次
发布时间:2019-06-26

本文共 2547 字,大约阅读时间需要 8 分钟。

hot3.png

学习来自《极客学院》

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 = 21106 println("\(p.name)")

运行结果:

 

转载于:https://my.oschina.net/u/2363463/blog/635943

你可能感兴趣的文章
第一次作业人工智能
查看>>
labeled LDA,Hierarchically Supervised LDA
查看>>
JavaScript 捕获按键
查看>>
记录Javascript数组的方法参考
查看>>
截图软件
查看>>
关于抽奖概率的问题
查看>>
《鸟哥的私房菜阅读摘要》——linux的简介和计算机基础
查看>>
hql语句的case when then else end问题
查看>>
13040:All in All
查看>>
动态规划
查看>>
单纯形法
查看>>
21.Spring Boot 使用Java代码创建Bean并注册到Spring中
查看>>
window.location.href的用法
查看>>
C# MVC中直接执行Js
查看>>
mac book下批量替换多个文件中的字符
查看>>
python IO编程-序列化
查看>>
9.回文数
查看>>
[转] 使用NVM快速搭建NODE开发环境
查看>>
pip国内源
查看>>
java的一些基本概念
查看>>