0

当我在 didSet 中创建递归时,实际上我发现我可以放一个 return 并且程序从 didSet 退出。但是我没有找到任何地方(我搜索了很长时间)我可以输入一个返回词来退出 didSet。那么,didSet 是否像计算属性一样工作,我们可以在其中返回值?如果有人知道任何事情,我将不胜感激。谢谢你。

 class AppDetailController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
var app : App? {
    didSet {
        if app?.screenshots != nil {
            return 
        }
        if let id = app?.id {
            let urlString = "https://api.letsbuildthatapp.com/appstore/appdetail?id=\(id)"
            URLSession.shared.dataTask(with: URL(string: urlString)!, completionHandler: { (data, response, error) in
                if error != nil {
                    print(error)
                }
                do {
                let json = try(JSONSerialization.jsonObject(with: data!, options: .mutableContainers ))
                    let appDetail = App()
                    appDetail.setValuesForKeys(json as! [String: AnyObject])


                   self.app = appDetail
                } catch let error as NSError {
                    print(error.localizedDescription)
                }
            }).resume()
        }

     }
}
4

3 回答 3

1

不,didSet 与计算属性没有任何关系。实际上didSet {}andwillSet是用于存储属性的,它们的作用是didChangeValueand willChangeValue。因此,您可以更改类或结构中的其他数据,或者根据更改要为其定义的属性的值运行某些didSet方法willSet

他们像一个函数一样工作并且有一个属性。newValue因为willSet它会为您提供新的价值,并将为您的财产设置新oldValue的价值,并didSet在更改其价值之前为您提供财产的旧价值。您可以像这样更改这些属性的名称:

willSet(myNewValue) { }
didSet(myOldValue) { }
于 2018-04-25T13:05:17.037 回答
0

didSet 是一个属性观察器,每次在存储的属性中存储新值时都会调用它。

将 didSet 视为返回 void 的方法。您检查代码中的条件,如果满足,您可以返回,以便其余代码可能不会执行。

于 2018-04-25T13:04:54.240 回答
0

willSet在or后面的花括号中的东西didSet是一个函数体。退出函数体的方式是说return.

于 2018-04-25T13:32:06.893 回答