Swift: 我的 class 的哪个实例在视图中

Swift: What instance of my class is in the view

我正在构建一个带有包含 tableView 控制器的容器视图的应用程序。我创建了这个 tableView,但我不知道如何再次访问这个对象,所以我可以调用它的函数。目前有一个自动创建的 BucketTableViewController 对象(可能来自情节提要)。然后我想在它上面调用一个函数并创建另一个 BucketTableViewController 对象。我可以通过该方法的打印语句来验证它们是唯一的。如何为原始对象设置变量?

import UIKit

class FirstViewController: UIViewController {


    var bigArray = ["M", "A", "R", "C"]
    let delegate = UIApplication.sharedApplication().delegate as! AppDelegate

    override func viewDidLoad() {
        super.viewDidLoad()
        reachForWebsite()    
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func reachForWebsite(){
        let url = NSURL(...)
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
            do {
                ...
                // HERE IS THE ISSUE
                var bucketsVC = BucketTableViewController()
                bucketsVC.updateBuckets(self.bigArray)
            } catch let myJSONError {
                print(myJSONError)
            }
        }
        task!.resume()
    }
}

您可以从拥有该容器的视图控制器中的 prepareForSeque(_:sender:) 获取对它的引用。确保该标识符与您在 Interface Builder 的情节提要中的 segue 上设置的标识符的名称相匹配。或者,如果您确定没有其他目标类型为 BucketTableViewController.

的转场,则可以省略标识符部分
class BucketTableViewController: UITableViewController {}

class FirstViewController: UIViewController {

    var bucketViewController: BucketTableViewController!

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        super.prepareForSegue( segue, sender: sender )

        if let vc = segue.destinationViewController as? BucketTableViewController where segue.identifier == "embeddedBuketViewcontroller" {
            self.bucketViewController = vc
        }
    }
}

一条评论太紧了,所以我把它作为一个答案。您可以使 </code>bucketsVC` 成为实例变量:</p> <pre><code>class FirstViewController: UIViewController { var bucketsVS : BucketTableViewController? func reachForWebsite(){ ... do { self.bucketsVC = BucketTableViewController() self.bucketsVC!.updateBuckets(self.bigArray) } catch { ... } // Now you can use it anywhere within your UIViewController } }