Ios 在viewDidLoad和ViewDidDisplay之间传递数据
我想知道如果在viewDidLoad中有条件地创建了一个值,并且没有初始化,那么如何在viewDidLoad和ViewDidDisplay之间传递该值Ios 在viewDidLoad和ViewDidDisplay之间传递数据,ios,swift,swift3,Ios,Swift,Swift3,我想知道如果在viewDidLoad中有条件地创建了一个值,并且没有初始化,那么如何在viewDidLoad和ViewDidDisplay之间传递该值 override func viewDidLoad() { if let foo = self.foo { let webView = UIWebView(frame: self.view.frame) scrollView.addSubView(webView) } } override fun
override func viewDidLoad() {
if let foo = self.foo {
let webView = UIWebView(frame: self.view.frame)
scrollView.addSubView(webView)
}
}
override func viewDidAppear() {
// How do I use my conditionally created webView here?
func doSomething(webView: UIWebView) {
// Do stuff
}
}
两个方法都在同一范围内-它们位于同一类实例内,您可以使用实例变量,例如:
fileprivate var webView: UIWebView?
override func viewDidLoad() {
super.viewDidLoad()
if let foo = self.foo {
let webView = UIWebView(frame: self.view.frame)
scrollView.addSubView(webView)
self.webView = webView
}
}
override func viewDidAppear() {
super.viewDidAppear()
if let webView = self.webView {
// do something with my webView
}
}
只需将
webView
移动到类范围,您就可以在类中的任何地方访问它
class MyClass : UIViewController
{
var webView : UIWebView?
override func viewDidLoad() {
if let foo = self.foo {
webView = UIWebView(frame: self.view.frame)
scrollView.addSubView(webView)
}
else
{
webView = nil // or set to some default
}
}
override func viewDidAppear() {
// How do I use my conditionally created webView here?
if webView != nil
{
// Do stuff
}
}
}
您可以将webView用作全局变量
let webView : UIWebview {
return UIWebView(frame: self.view.frame)
}
override func viewDidLoad() {
if let foo = self.foo {
scrollView.addSubView(webView)
}
}
override func viewDidAppear() {
doSomething()
}
func doSomething() {
// Do stuff
}
或者您可以访问scrollview子视图
for subview in scrollView.subviews {
if subview is UIWebview {
doSomething(webview: subview as! UIWebView)
}
}
您可以将webView设置为全局变量:
var webView : UIWebView?
override func viewDidLoad() {
if let foo = self.foo {
self.webView = UIWebView(frame: self.view.frame)
scrollView.addSubView(self.webView!)
}
}
override func viewDidAppear() {
// How do I use my conditionally created webView here?
func doSomething(webView: UIWebView) {
// Do stuff
}
if let myWebView = self.webView{
doSomething(webView: myWebView)
}
}
一种更好的类似di方法:
var webView : UIWebView?
override func viewDidLoad() {
if let foo = self.foo {
self.webView = UIWebView(frame: self.view.frame)
scrollView.addSubView(self.webView!)
}
}
override func viewDidAppear() {
// How do I use my conditionally created webView here?
if let myWebView = self.webView{
self.doSomething(webView: myWebView)
}
}
func doSomething(webView: UIWebView) {
// Do stuff
}
试试这个
class ViewController
{
//Init glabal variable
let webView:UIWebView? = nil
override func viewDidLoad()
{
if let foo = self.foo {
webView = UIWebView(frame: self.view.frame)
scrollView.addSubView(webView)
}
override func viewDidAppear()
{
if(webView != nil)
{
func doSomething(webView: UIWebView)
{
// Do stuff
}
}
}
}
实例变量。谢谢,使用可能永远不会使用的全局变量有什么缺点吗?@patrikqvarnstrom的“全局变量”实际上是指属性吗?这是对资源的浪费,但Xcode会告诉您是否从未使用过属性(它还会告诉您
var
是否应该是let
,因为它从未发生过变异)。nil
是optionals的默认值。不需要在else
中再次设置它。真的-我总是试图让代码非常明显和明确-所以有时我会过度使用