学习来自《极客学院》

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

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

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

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

 import Foundation

 struct lengthRang {
var start:Int
//定义常量存储属性,可以不指定初始值
let length:Int
}
//创建结构体的实例变量
var len = lengthRang(start: , length: )
println("len的起点为\(len.start),长度为\(len.length)") //延迟存储属性:第一次被调用时候才会被计算初始值的属性,用lazy修饰符
//当某个实例是一个创建成本比较大的实例的引用的时候,使用延迟存储可以提高程序的性能
//延迟存储属性只能被定义成变量,也就是var关键字创建,所以不能用let创建 //计算属性:就是set和get方法的组合
/*语法格式
[修饰符] var 计算属性名:属性类型{
get{
}
set(形参名){
}
}
*/ class User {
var first:String = ""
var last:String = ""
//定义计算属性
var fullName:String{
//定义计算属性的getter方法,该方法的返回值由first、last两个存储属性决定
get{
return first + "_" + last
}
//定义计算属性的setter方法
set(newValue){
var names = newValue.componentsSeparatedByString("_")
self.first = names[]
self.last = names[]
}
}
init(first:String,last:String){
self.first = first
self.last = last
}
}
//创建一个实例
let s = User(first: "heyang", last: "hello")
println(s.fullName)
s.fullName = "何杨_你好"
println(s.fullName)
//只读属性,则无需set部分,可以省略get和花括号 //属性观察者
/*
1.除了延迟存储属性之外的所有存储属性(包括实例存储属性和类型存储属性)
2.可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加属性观察者
*/
//其实属性观察者就是 两个特殊的回调方法
/*
[修饰符]var 计算属性名:属性类型 = 初始值{
wilSet(newValue){
//属性即将被赋值之前自动调用的方法
}
didSet(oldValue){
//属性呗赋值完成之后自动调用的方法
}
}
*******参数可以省略*********
*/
class Person {
//定义存储属性
var name:String = ""{
willSet{
if(count(newValue)>) || (count(newValue)<){
println("您设置的人名字\(newValue)不符合要求,请重新设置")
}else{
println("人名符合要求,设置成功")
}
}
didSet{
println("人名设置完成,被修改的原名为:\(oldValue)")
}
}
var age:Int = {
willSet{
if newValue> || newValue<{
println("您设置的年龄\(newValue)不符合要求,请重新设置!")
}
else{
println("年龄设置符合要求,设置成功。")
}
}
didSet{
println("年龄设置完成,被修改的年龄为\(oldValue)")
}
}
}
//然后是创建实例
var p = Person()
p.name = "张三"
p.age =
println("\(p.name)")

运行结果:

最新文章

  1. 【转】Caffe初试(五)视觉层及参数
  2. 【SQL Server】左联接,右联接,内联接的比较
  3. http://www.cnblogs.com/dumuqiao/p/3654702.html?utm_source=tuicool&amp;utm_medium=referral
  4. codeforces 55D - Beautiful numbers(数位DP+离散化)
  5. 模式识别 - 处理多演示样例学习(MIL)特征(matlab)
  6. 苹果Mac操作系统下怎么显示隐藏文件
  7. POJ 1321 棋盘问题(DFS &amp; 状压DP)
  8. 移动端html5重力感应
  9. 不可小觑的Web开发编码规范
  10. 第52周四ApplicationContext
  11. Dubbo分布式服务子系统的划分
  12. 以css伪类为基础,引发的选择器讨论 [新手向]
  13. TopCoder Div2
  14. 20175208 《Java程序设计》第九周学习总结
  15. CentOS 7升级Python到3.5后yum出错
  16. L308 New brain cells made throughout life
  17. Redis缓存在Spring的使用
  18. JAVA 从头开始&lt;五&gt;
  19. js数组基本知识
  20. 关掉firefox(火狐)和palemoon地址栏自动加www.前缀功能【转】

热门文章

  1. libtool: link: `dftables.lo&#39; is not a valid libtool object
  2. LeetCode-96. Unique Binary Search Trees
  3. Vue基础----&gt;VueJS的使用(二)
  4. SpringMVC核心——视图渲染(包含视图解析)问题
  5. 自学silverlight 5.0
  6. 分享一下学习css,js心得
  7. Tesseract-OCR引擎 入门
  8. Python入门笔记(5):对象
  9. Python基础:模块
  10. Javascript定时跳转