Swift - 关于属性(Property)

 

Swift中和实例相关的属性可以分为2大类:存储属性、计算属性

一、存储属性(Stored Property)

 a、在创建类、结构体实例时,必须为所有的存储属性设置一个合适的初始值

 b、可以在初始化器里为存储属性设置一个初始值

 c、可以分配一个默认的属性值作为属性定义的一部分

 d、存储在实例的内存中 e、结构体、类可以定义存储属性  f、枚举不可以定义存储属性

//例
struct Circle {
    var radius: Double
    var dimater: Double{
        set{
            radius = newValue / 2
        }
        get{
            radius * 2
        }
    }
}

 

二、计算属性(Computed Property)

     a、传入的新值默认叫做newVBalue ,只读计算属性:只有get,没有set

     b、定义计算属性只用能var ,不用能let  c、本质就是方法(函数),不占用内存   d、枚举、结构体、类都可以定义计算属性

三、延迟存储属性(懒加载)lazy

使用lazy可以定义一个延迟存储属性,在第一次用到属性的时候才会进行初始化

 a、lazy 属性必须是var ,不能是let

 b、如果多线程同时第一次访问lazy属性,(无法保证属性只被初始化1次)

 警告!

 当结构体包含一个延迟存储属性时,只有var才能访问延迟存储属性,因为延迟属性初始化时需要改变结构体的内存

//例 1
class Calumator{
    var x: Int = 5
    var y: Int = 6
    var sum: Int{
        set {y = newValue - x}
        get {x + y}
    }
}
let cal = Calumator()
print(cal.sum) // get 11
cal.sum = 20 // set  y = 20 - 5 = 15
print(cal.y)//15

如果只有get,没有set方法时可以简写.但是不能再赋值 

例2 只读属性 ,只有get ,没有set
struct Circle {
    var radius:Double
    var diameter:Double{
        get{  radius * 2}
    }
}

例3 可以省略get
struct Circle1 {
    var radius:Double
    var diameter:Double{radius * 2 }
    
}

四、属性观察器(Property Observer)

a、可以为非lazy 的var存储属性设置属性观察器

 b、在初始化器中设置属性值不会触发:willSet和didSet

 c、在属性定义时设置初始值也不会触发willSet和didSet

 d、willSet 会传递新值,默认叫 newValue

 e、didSet 会传递旧值,默认叫 oldValue

struct Circle {
    var radius: Double{
        willSet{
            print("willSet= \(newValue)")
        }
        didSet{
            print("didSet= \(oldValue) radius= \(radius)")
        }
        
    }
    
    init() {
         self.radius = 10
        print("init")
    }
}

var  circle = Circle() // init

circle.radius = 45
//willSet= 45.0  didSet= 10.0 radius= 45.0

五、单例

public class FileManager{
    
    public static let shared = FileManager()
    private init(){}
    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值