创建可以跨多个ViewControllers传递的变量。斯威夫特4

时间:2017-09-18 21:32:16

标签: ios arrays swift model-view-controller uiviewcontroller

我有2个VC在运行时运行良好。但是,阵列位于全局区域中。这似乎有风险。如果我将它们移动到FirstViewController类,它们将不会传递给SecondViewController。

有没有办法可以重写或宣布它们更安全?我尝试了很多解决方案,但似乎无法找到正确的代码语法。

FirstViewController

import UIKit

var siteName = ["Google", "Yahoo", "YouTube"]
var siteAddress = ["https://www.google.com", "https://www.yahoo.com", "https://www.youtube.com"]
var row = 0

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return siteName.count
    }

    internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = siteName[indexPath.row]
        return cell
    }

    internal func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        row = indexPath.row
        performSegue(withIdentifier: "mySegue", sender: self)
    }
}

SecondViewController

import UIKit
import WebKit

class SecondViewController: UIViewController,  WKUIDelegate {
    @IBOutlet weak var navBarTitle: UINavigationItem!
    @IBOutlet weak var webViewConnect: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        navBarTitle.title = siteName[row]

        let myURL = URL(string: siteAddress[row])
        let myRequest = URLRequest(url: myURL!)
        webViewConnect.load(myRequest)
    }
}

*修订工作代码*

MasterViewController

import UIKit

class siteVars {
    var siteName = ["Google", "Yahoo", "YouTube"]
    var siteAddress = ["https://www.google.com", "https://www.yahoo.com", "https://www.youtube.com"]
    var siteRow = 0
}

FirstViewController

import UIKit

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var siteData = siteVars()

    internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return siteData.siteName.count
    }

    internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = siteData.siteName[indexPath.row]
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        siteData.siteRow = indexPath.row
        performSegue(withIdentifier: "mySegue", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "mySegue" {
            let secondViewController = segue.destination as! SecondViewController
            secondViewController.siteData.siteRow = siteData.siteRow
        }
    }
}

SecondViewController

import UIKit
import WebKit

class SecondViewController: UIViewController,  WKUIDelegate {

    var siteData = siteVars()

    @IBOutlet weak var navBarTitle: UINavigationItem!
    @IBOutlet weak var webViewConnect: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        navBarTitle.title = siteData.siteName[siteData.siteRow]

        let myURL = URL(string: siteData.siteAddress[siteData.siteRow])
        let myRequest = URLRequest(url: myURL!)
        webViewConnect.load(myRequest)
    }
}

0 个答案:

没有答案