Swift -- 属性

本文介绍了Swift语言中类的定义及使用,详细解释了存储属性、计算属性、延迟存储属性和类型属性的概念与应用场景。同时,还介绍了如何利用属性监视器进行属性值变更的监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


//swift中声明类 用class
    /*swift中属性有两种,存储属性 和 计算属性, 存储属性就是存储在对象(实例)中的一个变量或者常量
        存储属性类似于其他面向对象语言中的成员变量
    */
        class student {
            
            var name = "tony"
            var age = 13
            let grade = 3
            
        }
        
    //系统并不会自动初始化上面的3个存储属性,需要进行手动初始化
    //直接通过点运算符(.),就可以读写某个对象的存储属性

        let stu = student()
        print("name = \(stu.name)")
        print("age = \(stu.age)")

    //延迟存储属性:第一次使用时才进行初始化的属性, 用lazy来标识一个延迟存储属性, 延迟存储属性必须是变量,不能是常量
        
        class tea {
            
            var name = "teatea"
        }
        
        class teacher {
            
            lazy var tea1 : tea = tea()
            
        }
        
        let teacher1 = teacher()
        print("\(teacher1.tea1)")//此时才会初始化tea属性
    
        
        /*计算属性(用get set 存值取值)
        1.因为计算属性的值不是固定的,因此只能用var修饰计算属性,不能用let
        2.
        */
        
        class Square {
            
            var width : Double = 4.0
            
            var circle: Double {
                get {
                    
                    return width * 4
                    
                }
                
                set(newValue) {
                    
                    width = newValue / 4
                    
                }
            
            }
        
        }
        let s2 = Square()
            s2.width = 10
        print(s2.width)
        
        s2.circle = 100
        print(s2.width)
        
        /*类型属性:一个类只会有一份,类的多个实例对象都共享这唯一的一份
        什么是类型属性
        用class关键字修饰的属性,就是类型属性,也可以称为“类属性”
        class修饰的类型属性只能是计算属性,不能是存储属性
        */
        
        class number {
            
            class var age : Int {
                
                return 20
            }
        }

        //直接使用,不依赖于类名而存在
        print(number.age)
        
        /*
        属性监视器:计算属性可以直接在set方法中监视,存储属性中用willSet 和 didSet两个属性监视器
        willSet:在设置新的属性值之前调用,会将新的属性值作为参数传入,参数名默认是newValue
        didSet:在设置新的属性值之后调用,会将旧的属性值作为参数传入,参数名默认是oldValue
        使用注意:willSet和didSet在属性初始化过程中不会被调用,只会当属性的值在初始化之外的地方被设置时被调用,并且willSet、didSet和set、get不能共存
        
        */
        
        class school{
            
            var history: Int = 120 {
            
                willSet{
                    
                    print("------\(newValue)")
                }
                didSet {
                    
                    print("--------\(oldValue)")
                }
            
            }
        }
        
        let sch = school()
        sch.history = 30


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值