在swift中检查里面的getter方法?

时间:2016-03-16 07:26:33

标签: arrays swift properties

我的视图控制器中有一个数组。只有在它为零时才应该分配它,否则它应该返回现有值。

Objective C equivalent:

- (NSArray*)states{
     if(!_states)
     {
         _states = //read files from json and assigned to array
     }
     return _states;
}

我必须迅速实现这一目标。我尝试使用存储属性但无法实现此

实现这一目标的最佳方式是什么

3 个答案:

答案 0 :(得分:3)

可能是这样的:

class Whatever {
    private(set) var _states: [AnyObject]?
    var states: [AnyObject] {
        get{
            if let st = _states {
                return st
            }
            else {
                // Read from file
                _states = ....
                return _states!
            }
        }
    }
}

在SWIFT中,没有实例变量的概念,只有属性,通过写这个private(set) var _states: [AnyObject]?,我们说_states不能从我们的类之外写,而只是在里面。然后我们创建一个只读属性,如果它不是nil或者用数据填充它,我们_states将它绑定到stclass Whatever { lazy var states: [AnyObject] = { return array read from file }() } 将它绑定到var express = require('express') ; var app = express() ; var server = require('http').createServer(app) ; var socket = require('socket.io')(server) ; 。 还有一种SWIFTY方法可以做到这一点,称为延迟属性:

server.listen(8080) ;

通过使用lazy,我们说只在第一次调用属性时创建该数组,一旦设置它将永远不会再创建,但只是返回。基本上它不会再次从文件传递给数组。

答案 1 :(得分:3)

我们也可以在Swift 3.0中使用。

private var _designContentViewController: DesignContentViewController?

var designContentViewController: DesignContentViewController? {
    get {
        if _designContentViewController == nil {
            _designContentViewController = DesignContentViewController()
            self.view.addSubview((_designContentViewController?.view)!)
            _designContentViewController?.view.isHidden = true
            _designContentViewController?.view.backgroundColor = UIColor.white
        }
        return _designContentViewController

    }
    set {
        _designContentViewController = newValue
    }
}

答案 2 :(得分:2)

你分两步走。您使用_states等存储属性,其中包含可选数组。然后你有一个计算属性状态,它访问_states可选数组,并返回unwrapped值或首先加载_states。

相关问题