Swift基础(七)类

来源:互联网 发布:淘宝问卷调查 编辑:程序博客网 时间:2024/06/05 16:54
 // 实例化SomeClass的对象
        var someClass = SomeClass();
        // 访问存储属性
        let newValue1 = someClass.value1;
        let newValue2 = someClass.value2;
        
        // 访问类型属性
        SomeClass.newValue;
        
        // 调用实例方法
        someClass.additive() // 加1
        someClass.subtraction(10) // 减去指定的值
        someClass.reset() // 设置为0;
        
        // 调用类方法
        SomeClass.betterArmed(); // 你拥有最好的装备-制杖
        
        // 子类调用方法
        NewSomeClass.betterArmed(); // 你拥有最好的装备-制杖
                                    // 子类,重写了父类方法
        // 使用下标脚本
        someClass[0] = 5;
        someClass[1] = 6;
        print(someClass[0]);
        print(someClass[1]);



// self属性(局部变量和存储属性同名的解决方法)
    class NewClas {
        var count: Int = 100;
        func printcount() {
            var count: Int = 50;
            print(count); // 使用局部变量,输出50
            print(self.count); // 使用存储变量,输出100
            
        }
        
    }
    
    class SomeClass {
        // 在这里定义属性、下标脚本、方法
        // 在Swift中,属性可以将值跟特定的类、结构或枚举关联。属性一般分为存储属性,计算属性和类型属性
        // 定义存储属性 必须有初始值,否则会出现错误
        var value1 = 0;
        var value2: Int = 0;
        
        // 定义计算属性,不存储值,而是提供一个getter和setter来获取值、设置其他属性的值。getter使用get关键字定义,setter使用set关键字进行定义,语法形式如下:
        var cal: Int { // 定义计算属性 cal
            get { // 定义 getter
                return cal;
            }
            set (newValue) { // 定义 setter
                cal = newValue;
            }
        }
        
        // 类型属性,就是不需要对类进行实例化就可以使用的属性。它需要使用关键字 class 进行定义,除了有关键字class外,还需要使用var关键字,但不能使用let关键字,否则程序提示错误。定义一个类型属性 newValue的代码如下:
        class var newValue: Int { // 定义类型属性 newValue
            return 10;
        }
        
        // 属性监视器,可以用来监控属性值的改变,每次属性被修改的时候,都会被调用,即使新的值和旧的值一样。一个属性监视器由willSet和didSet组成。
        // willSet 在设置新的值之前被调用,新的值作为传参,
        // didSet 在新的值被设置之后被调用,会将旧的属性值作为传参。
        // 下面使用属性监视器监视 totalSteps属性值的变化
        var teachers: Int = 0 {
            // 完整的属性监视器
            willSet(newTeachers) {
                print("新增加老师 \(newTeachers)");
            }
            didSet(old) {
                if teachers > old {
                    print("与原来相比增加了 \(teachers - old) 位老师");
                }
            }
        }
        
        // 方法,就是定义在类中的函数。在 Swift 中,根据被使用的方式不同,方法分为了实例方法和类方法两种。
        // 实例方法
        var score = 0;
        
        // 让 score加1
        func additive() {
            score++;
            print(score);
        }
        
        // 让score 减去一个指定的数值
        func subtraction(amount: Int) {
            score -= amount;
            print(score);
        }
        
        // 将score设置为0
        func reset() {
            score = 0;
            print(score);
        }
        
        // 类方法,类名调用,定义类型方法需要在func关键字之前加上关键字class
        // 定义类型方法
        class func betterArmed() {
            print("你拥有最好的装备-制杖");
        }
        
        // 下标脚本,就是通过索引快速取值的一种语法,例如数组的a[0]就是一个下标脚本,通过索引0老快速取值。在Swift中,我们可以在类(Class)、结构体(structure)和枚举(enumeration)中自己定义下标脚本。下标脚本是访问对象、集合或者序列的快速方式。尅发着不需要调用实例特定的赋值和访问方法,就可以直接访问所需要的数值。
        // 下标脚本使用subscript关键字来定义,通过get、set来定义读、写属性,可以只有get只读方法。
        /*
        subscript(参数名称1:数据类型,参数名称:数据类型,...) -> 返回值的数据类型 {
            get {
                // 返回与参数类型一样的值
            }
            set() {
                // 执行相关赋值操作
            }
        }
 */
        // 在类中定义一个下标脚本,代码如下:
        var age: [Int] = Array(count: 5, repeatedValue: 0);
        subscript(index: Int) -> Int {
            get {
                return age[index];
            }
            
            set(newValue) {
                age[index] = newValue;
            }
        }
    }
    
    class NewSomeClass: SomeClass {
        // 子类使用override关键字来重写父类的方法。如果没有写override,就会出现编译器错误。同样,编译器也会检查带有override关键字的方法是否真的重写了父类的方法
        override class func betterArmed() {
            super.betterArmed();
            print("子类,重写了类方法");
        }
    }


0 0
原创粉丝点击