美文网首页
Swift 属性与下标

Swift 属性与下标

作者: 随心_追梦 | 来源:发表于2017-12-06 21:58 被阅读0次

    swift中属性分为静态属性和存储属性,存储属性类似于OC中的数据成员,计算属性不存储数据

    存储属性

    存储属性适用于类、结构体(枚举只有静态存储属性)

    1. 延时存储属性
      俗称:懒加载,只有在首次调用的时候才初始化。
    struct structOne {
        let name: String = "zhangsan"
    }
    
    class classOne {
        lazy var paramary: structOne = structOne()
    }
    
    1. 计算属性
      计算属性本身并不存储数据,他通过计算返回数据。类、结构体、枚举都可以定义计算属性
      计算属性必须使用var修饰,语法结构如下:
    面向对象类型  类型名 {       
            var 计算属性名: 就算属性类型 {
                get {
                    return 计算后属性值
                }
                set(新属性值) {             //默认newValue
                              
                }
            }
        }
    

    只读计算属性 (省略setter访问器,省略get{}代码)。语法如下:

    var fullName: String {      
          return “sun” + “tao”  
    }
    
    1. 属性观察者
      属性观察者能够监听存储属性的变化,不能监听延迟存储属性和常量存储属性的变化

    wiiSet: 观察者在修改之前调用
    didSet:观察者在修改之后调用

    语法结构

    面向对象类型  类型名 {
    
            var 存储属性:数据类型 = 初始化值 {
    
                willSet(新值) {
                …
                }
                didSet(旧值) {
                 …
                }
            }
        }
    
    1. 静态属性
      3种面向对象类型(类、结构体、枚举)都可以定义静态属性,它们的语法结构分别如下:

    注意:在静态计算属性中不能访问实例属性(包括存储属性和计算属性),但是可以访问其他静态属性。在实例计算属性中能访问实例属性,也能访问静态属性。

    struct 结构体名 {
        static var(或let) 存储属性 = "xxx"
        static var 计算属性名:属性数据类型 {
            get {
                return 计算后的值
            }
            set(新属性值) {
                ...
            }
        }
    }
    

    枚举中不可以定义实例存储属性,但可以定义静态存储属性和静态计算属性

    enum 枚举名 {
        static var (或let) 存储属性 = "xxx"
        static var 计算属性名: String {
            get {
                return "计算后的值"
            }
            set(新属性值) {
            }
        }
    }
    

    类静态计算属性如果使用static定义,该属性不能再子类中重写(override),使用class可以在子类重写

    class 类名 {
        static var(或let) 存储属性 = "xxx"
        static(或class) var 计算属性名: String {
            get {
                return "计算后的值"
            }
            set(新属性值) {
                
            }
        }
    }
    

    总结如下:

    类型 实例存储属性 静态存储属性 实例计算属性 静态计算属性
    支持 支持 支持 支持
    结构体 支持 支持 支持 支持
    枚举 不支持 支持 支持 支持

    下标

    我们可以通过下标访问一些集合类型中的元素,它的语法结构如下:

    面向对象类型  类型名 {       
            其他属性
            ...
            subscript(参数:参数数据类型) -> 返回值数据类型 {
                get {
                    return 返回值
                }
                set(新属性值) {             //默认newValue
                   ...
                }
            }
        }
    

    代码示例:

    //使用下标实现二位数组
    struct DoubleDimensionalArray {
        
        let rows: Int, columns: Int
        var grid: [Int]
        
        init(rows: Int, columns: Int) {
            self.rows = rows;
            self.columns = columns;
            grid = Array.init(repeating: 0, count: rows * columns)
        }
        
        subscript(row: Int, column: Int) -> Int {
            get {
                return grid[row * columns + column]
            }
            set {
                grid[row * columns + column] = newValue
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Swift 属性与下标

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