Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在viewDidLoad和ViewDidDisplay之间传递数据_Ios_Swift_Swift3 - Fatal编程技术网

Ios 在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

我想知道如果在viewDidLoad中有条件地创建了一个值,并且没有初始化,那么如何在viewDidLoad和ViewDidDisplay之间传递该值

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
中再次设置它。真的-我总是试图让代码非常明显和明确-所以有时我会过度使用