学习来自《极客学院》
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)")
运行结果: