zoukankan      html  css  js  c++  java
  • Stored Properties 与 Computed Properties

    Stored Properties 与 Computed Properties

    About Swift

    Stored Properties

    In its simplest form, a stored property is a constant or variable that is stored as part of an instance of a particular class or structure. Stored properties can be either variable stored properties (introduced by the varkeyword) or constant stored properties (introduced by the let keyword).

    You can provide a default value for a stored property as part of its definition, as described in Default Property Values. You can also set and modify the initial value for a stored property during initialization. This is true even for constant stored properties, as described in Assigning Constant Properties During Initialization.

    Computed Properties

    In addition to stored properties, classes, structures, and enumerations can define computed properties, which do not actually store a value. Instead, they provide a getter and an optional setter to retrieve and set other properties and values indirectly.

    细节

    computed properties 本质上只是一个setter,getter方法,但在使用上却跟使用 stored properties 时效果一致, 所以,我们可以将 computed properties 理解为方法.

    两者的一些区别

     

    以及使用心得

    源码

    //
    //  Model.swift
    //  ModelDemo
    //
    //  Created by YouXianMing on 15/9/30.
    //  Copyright © 2015年 ZiPeiYi. All rights reserved.
    //
    
    import UIKit
    
    class Model: NSObject {
            
        // MARK: Stored Properties
        
        private  var cellFlag   : String?
        private  var cellHeight : CGFloat?
        internal var data       : AnyObject?
        
        // MARK: Computed Properties
        
        var rowHeight : CGFloat {
            
            get {
                
                if let _ = cellHeight {
                    
                    return cellHeight!
                    
                } else {
                    
                    return 40
                }
            }
            
            set(newVal) {
                
                cellHeight = newVal
            }
        }
        
        var reusableCellIdentifier : String {
            
            get {
                
                if let _ = cellFlag {
                    
                    return cellFlag!
                    
                } else {
                    
                    return "reusableCellIdentifier"
                }
            }
            
            set(newVal) {
                
                cellFlag = newVal
            }
        }
        
        // MARK: Method
        override init() {
            
            super.init()
        }
        
        init(reusableCellIdentifier : String, rowHeight : CGFloat, data : AnyObject?) {
            
            super.init()
            
            self.reusableCellIdentifier = reusableCellIdentifier
            self.rowHeight              = rowHeight
            self.data                   = data
        }
    }
    //
    //  ViewController.swift
    //  ModelDemo
    //
    //  Created by YouXianMing on 15/9/30.
    //  Copyright © 2015年 ZiPeiYi. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
        
        override func viewDidLoad() {
            
            super.viewDidLoad()
            
            let model1 = Model()
            print(model1.rowHeight)
            print(model1.reusableCellIdentifier)
            print(model1.data)
            
            let model2 = Model(reusableCellIdentifier: "cellTypeOne", rowHeight: 20, data: nil)
            print(model2.rowHeight)
            print(model2.reusableCellIdentifier)
            print(model2.data)
        }
    }
  • 相关阅读:
    Android Studio 使用SlidingMenu侧滑菜单
    【翻译】使用Sencha Ext JS 6打造通用应用程序
    将Ext JS 6应用程序导入Web项目
    Ext JS 6正式版的GPL版本下载地址
    谈谈Ext JS的组件——布局的使用方法续二
    谈谈Ext JS的组件——布局的使用方法续一
    谈谈Ext JS的组件——布局的使用方法
    谈谈Ext JS的组件——容器与布局
    jQuery音乐播放器jPlayer
    jQuery上下切换带缩略图的焦点图
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4849201.html
Copyright © 2011-2022 走看看