Swift5.0新语法特性

2023-04-08  本文已影响0人  凯文Kevin21
class Teacher {
    var name : String {
        willSet {
            //默认生成newValue来接收外界传递进来的新值
            print("将要设置的名字:\(newValue)")
        }
        
        //此属性被赋值后会调用的方法
        didSet {
            //默认生成oldValue来保存此属性的原始值
            print("旧的名字:\(oldValue)")
        }
    }
    
    var age : Int
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
//定义属性包装器
@propertyWrapper
struct MoreThanZero {
   
    private var number : Int
    init() {self.number = 0}
    var wrappedValue: Int {
        get {return number}
        set {
            if newValue < 0 {
                self.number = 0
            }else{
                self.number = newValue
            }
        }
    }
}

class Member: CustomStringConvertible {
    private var name : String
    private var age : Int
    init() {
        self.name = "default"
        self.age = 0
    }
    
    //使用属性包装器来定义计算属性
    @MoreThanZero var memberAge : Int
    var description: String {
        return "\(self.memberAge)"
    }
}


1.属性方法的调用,self可以省略, 有时候属性名称方法中的参数名称相同, 为了避免歧义,实例属性前面的self不能省略
2.实例属性赋值: 对于引用类型修改是没问题的,对于值类型, 使用mutating关键字修饰的实例方法才能对属性进行修改.
3.类方法使用staticclass关键字来声明, static关键字修饰的方法称为静态方法, 此方法不能被子类override


5.下标方法
关键字subscript :参数返回值作为下标和通过下标获取的值, 必须实现一个get代码块和一个可选的set代码块

public class MyArray {
    var array : Array<Int>
    init(param: Int...) {
        array = param
    }
    
    //subscript是用于定义下标功能的方法
    subscript(index:Int) -> Int {
        set{
            array[index] =  newValue
        }
        get {
            return array[index]
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读