美文网首页
7.属性与方法

7.属性与方法

作者: LucXion | 来源:发表于2020-06-08 18:02 被阅读0次

存储属性与计算属性,
类属性类方法class/static,
使用let和var接收值类型或引用类型变量的区别,
属性监听器willSet、didSet,
类实例通过下标获取数据subscript

Swift语言中对于属性的定义分为两类,分别是存储属性与计算属性。从字面意思理解,存储属性的作用是存储类的某个特征,而计算属性的作用是通过运算告知外界类的某个特征。存储属性只能用于类和结构体,计算属性可以用于类、结构体和枚举。

变量类型的属性可以修改,常量类型的属性不可修改。但是对于值类型实例,如果实例是常量接收的,则其中变量的属性也不可以修改。对于引用类型实例,无论实例是变量还是常量接收的,都可以修改变量类型的属性.

let 对象=  struct结构 + var属性 // 那么var属性不能修改
var 对象= struct结构 + var属性 // var属性可以修改
let 对象= class类型 + var属性  // var属性可以修改

存储属性可以通过lazy关键字设置为延迟加载,但是延迟加载的属性必须设置默认值
延时存储属性并不是线程安全的,如果在多个线程中对延时存储属性进行调用,不能保证其只被构造一次。

class Circle {
    var center:CGPoint
    var r:Double
    lazy var something:String = "happy"// 延迟属性
    // 计算属性
    var round:Double {// 将属性扩展作用域
        set (value){// 分别声明set、get,set中有个newValue默认值,这里自定义成value
            r = value / 2 / Double.pi
        }
        get {
            return 2 * Double.pi * r
        }
    }
    var round:Double {
        // 由于setter是可选的,不实现代表该计算属性为只读,只剩下一个getter时可省略成这样的形式
        return 2 * Double.pi * r
    }
    init(center:CGPoint,r:Double) {
        self.center = center
        self.r = r
    }
}
属性监听器,用于监听存储属性的赋值操作 willSet/didSet
class Circle {
    
    var center:CGPoint = CGPoint(x: 0, y: 0) {
        willSet {
            print("\(newValue)")//是一个常量
        }
        didSet {
            print("\(oldValue)")
            self.center = CGPoint(x: 15, y: 15)// 此处可以修改属性的最终值
        }
    }
    
    init(center:CGPoint) {
        // 设置默认值和init中对属性初始化都不会触发属性监听器
        self.center = CGPoint(x: 0, y: 0)
    }
}

类属性

class Student {
    // static修饰,静态属性
    static var name:String = ""
    static var key:String {
        return "key"
    }
    // class修饰,计算属性,子类可重写
    class var age:Int {
        return 1
    }
}
class StudentA :Student {
    override class var age: Int {
        return 3
    }
}
通过下标获取类属性
// 对象下标调用
class Student {
    
    var array:Array<Array<Int>>
    
    init(array:Array<Array<Int>>) {
        self.array = array
    }
    
    subscript (_ parama:Int,_ parama2:Int)->Int{
        set {
            array[parama][parama2] = newValue
        }
        get {
            return array[parama][parama2]
        }
    }
}
var temp = Student.init(array: [[1,2,3,4,5],[4,5,6,7,8],[123]])
print(temp[1,2])

相关文章

  • 7.属性与方法

    存储属性与计算属性,类属性类方法class/static,使用let和var接收值类型或引用类型变量的区别,属性监...

  • Day13类和对象的总结

    总结:1.编程思想2.类的声明3.对象方法4.init方法和构造方法5.对象属性6.对象属性的增删改查7.类的字段...

  • web前端入门到实战:11种常用css样式之文本字体学习

    常见css样式:1.字体与颜色2.背景属性3.文本属性4.边框属性5.鼠标光标属性6.列表样式7.定位属性8.内外...

  • 面向对象编程

    主要包括: 基本概念 属性私有化(类的封装) 实例属性与类属性 静态方法、类方法、与实例方法 继承与多态 获取对象...

  • CSS笔记3:样式属性

    7. 尺寸样式属性 8. 文本属性 9. 字体属性 10. 列表样式属性 例如:

  • Swift 语法概览(二)

    7. 枚举 枚举是一组相同数据类型集合,Swift 中,枚举可以添加计算属性,实例方法,初始化方法等,类似 Cla...

  • $

    除了 data 属性, Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的 da...

  • 时间序列模型方法

    SARIMAX模型属性与方法 summary 方法 模型的统计量与参数估计等 fittedvalues 属性 对应...

  • 超级实用的ES6用法总结

    本文目录: 1.箭头函数 2.展开操作符 3.剩余参数 4.字符串插值 5.简写属性 6.方法属性 7.解构赋值 ...

  • swift面向对象基础<二>

    存储属性和计算属性 今天讨论实例存储属性与实例变量,结构体常量与实例属性,定义计算属性,setter方法,属性观察...

网友评论

      本文标题:7.属性与方法

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