为什么我们可以从didSet属性观察者返回

时间:2018-04-25 12:49:26

标签: ios swift didset

当我在didSet中创建一个递归时,实际上我发现我只能放置一个返回并从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()
        }

     }
}

3 个答案:

答案 0 :(得分:1)

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

他们的工作就像一个功能,并拥有一个属性。 newValue willSet为您提供新值,oldValuedidSet设置为willSet(myNewValue) { } didSet(myOldValue) { } ,为您提供属性的旧值,然后再更改其值。您可以更改这些属性的名称,如下所示:

from selenium import webdriver
from bs4 import BeautifulSoup 
import pandas as pd
import time
import json
import re
driver=webdriver.Chrome("C:\\chrome\\chromedriver.exe")
driver.get('http://gestion.cnsc.gov.co/WebSetupDocentes/consultarlistas.aspx')
soup=driver.page_source
time.sleep(1)
driver.find_element_by_xpath("//option[contains(@value,'2')]").click()
time.sleep(1)
driver.find_element_by_xpath("//option[contains(@value,'158')]").click()
time.sleep(1)
driver.find_element_by_xpath("//input[contains(@type,'submit')]").click()
time.sleep(5)
soup=driver.page_source

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

术语return<div> <p>Here will appear the selected text :</p> <textarea name="selectedText" id="selectedText" [(ngModel)]="selectedText"></textarea> <button (click)="getSelectedText()">Get the selected text</button> </div> 之后的花括号中的内容是函数体。退出函数体的方法是说export class CaptureComponent { selectedText = ''; getSelectedText() { chrome.tabs.executeScript( { code: 'window.getSelection().toString();' }, function(selection) { this.selectedText = selection[0]; }); } }