当我在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()
}
}
}
答案 0 :(得分:1)
不,didSet与计算属性没有任何关系。实际上didSet {}
和willSet
用于存储的属性,它们扮演didChangeValue
和willChangeValue
的角色。因此,您可以更改类或结构中的其他数据,或者根据要为其定义didSet
和willSet
的属性的值来运行某些方法。
他们的工作就像一个功能,并拥有一个属性。 newValue
willSet
为您提供新值,oldValue
将didSet
设置为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];
});
}
}
。