美文网首页
Swift5.0新语法特性

Swift5.0新语法特性

作者: 凯文Kevin21 | 来源:发表于2023-04-08 00:37 被阅读0次
  • 1.属性监听器关键字:willSetdidSet
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
    }
}
  • 2.属性包装器
    背景:swift5.1版本之后引入的一个新的语法特性
    关键字:@propertyWrapper
//定义属性包装器
@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)"
    }
}

  • 3.实例属性和类属性
    1.类属性使用staticclass关键字来声明
    2.static关键字声明的属性成为静态属性

  • 4.实例方法和类方法

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]
        }
    }
}

相关文章

网友评论

      本文标题:Swift5.0新语法特性

      本文链接:https://www.haomeiwen.com/subject/ptymddtx.html