如何从一个 class 访问另一个变量? Swift代码

How to access variable from one class in another? Swift Code

我在将一个简单变量从一个 class 转换为另一个时遇到问题,这非常令人沮丧:/...

这是交易我有两个视图控制器 classes 命名为:ViewController.swiftViewController2.swift

ViewController.swift 链接到一个故事板,该故事板有一种我放置的库存袋,它只是一张图片。然后有一个@IBAction,当您单击它打开的包时,第二个故事板会弹出到视图中。这是由 ViewController2.swift 控制的。我想要做的只是将袋子图像的中心从 ViewController 传递到 ViewController2,但我似乎无法让它工作任何帮助将不胜感激。

class ViewController: UIViewController {
    @IBOutlet weak var InventoryBag: UIImageView!
    var bagCenter:CGPoint = CGPoint(x: 0, y: 0)

    override func viewDidLoad() {
        super.viewDidLoad()

        @IBAction func InventoryButtonTapped(sender: UIButton) {
            self.InventoryBag.image = UIImage(named: "backpackimageopen")
            bagCenter = self.InventoryBag.center

        func transferViewControllerVariables() -> (CGPoint){
            return bagCenter
            }

当我从这个 ViewController 打印 bagCenter 时,它工作正常并给我一个正确的值。所以我想以某种方式将 bagCenter 变量传递给 ViewController2.swift

这是我在 ViewController2.swift 中尝试过的方法,但它似乎从来没有起作用,而且总是给我一个 0 而不是实际值。

class ViewController2: UIViewController {

@IBOutlet weak var HideButton: UIButton!
@IBOutlet weak var InventoryCollection: UICollectionView!



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    //Load the center of the inventory bag to this view controller to align the hide button.
    var bagCenter = ViewController().transferViewControllerVariables()
}

但是当我这样做时,结果总是 0,而且我没有得到 ViewController1.

中显示的包的实际坐标

在 ViewController2

中创建以下变量
var previousViewController: ViewController!

在您的 ViewController Class

中添加以下代码行
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

    if segue.destinationViewController .isKindOfClass(ViewController2){
      let vc2 = segue.destinationViewController as! ViewController2
        vc2.previousViewController = self
    }
}

现在,在 ViewController2viewDidLoad 方法中,您可以像下面这样访问 bagCenter:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.


    var bagCenter = previousViewController.transferViewControllerVariables()
}

在视图控制器中试试这个

class ViewController: UIViewController { 

 @IBOutlet weak var InventoryBag: UIImageView!
    var bagCenter:CGPoint = CGPoint(x: 0, y: 0)

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

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func InventoryButtonTapped(sender: AnyObject) {
        self.InventoryBag.image = UIImage(named:"MAKEUP_SHARE.jpg")
        bagCenter = self.InventoryBag.center
        performSegueWithIdentifier("Go", sender: self)
    }


    // Give a segue identifier in storyboard
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "yoursegueidentifier" {
            let dvc =  segue.destinationViewController as? ViewController2
            dvc!.bagCenter = bagCenter
        }
    }
}

并在视图 controller2 中

class ViewController2: UIViewController {
    var bagCenter:CGPoint!
    override func viewDidLoad() {
        super.viewDidLoad()
        print(bagCenter)
    }
}