Ios 变量不存储?

Ios 变量不存储?,ios,swift,viewwithtag,Ios,Swift,Viewwithtag,我目前正在开发一个战术屏幕应用程序,人们可以访问一个数据库来添加玩家到他们的屏幕中。数据库工作正常,我现在正试图将球员信息传递到所选位置。玩家信息传递良好,但我现在在尝试将该玩家信息执行到所选位置时遇到问题: var selectedP: Int? @IBAction func selectAPlayer(_ sender: UITapGestureRecognizer) { self.selectedP = sender.view!.tag //print (selected

我目前正在开发一个战术屏幕应用程序,人们可以访问一个数据库来添加玩家到他们的屏幕中。数据库工作正常,我现在正试图将球员信息传递到所选位置。玩家信息传递良好,但我现在在尝试将该玩家信息执行到所选位置时遇到问题:

var selectedP: Int?

@IBAction func selectAPlayer(_ sender: UITapGestureRecognizer) {
    self.selectedP = sender.view!.tag
    //print (selectedP!)
}
上面的方法演示了如何使用
selectedP
保存所选位置的标记,以便访问其子视图。按照上述方法打印出正确的标签。但是,当我尝试在另一个方法中调用它时,返回的变量总是nil。我不太清楚问题出在哪里。下面是我尝试调用
selectedP
变量的方法:

func setPlayer () {
        //print(selectedP!)
    }
简单地打印
selectedP
会使程序崩溃,因为它显然等同于
nil
。我做错什么了吗


我必须注意,
setPlayer()
方法是由另一个类的segue调用的,该类本质上是一个
View Player
类。这在应用程序中显示为popover。我不确定如果你调用popoverController,变量是否会被还原?

如果我错了,请纠正我,但我相信你将变量设置为self.selectedP,而不是selectedP。我不熟悉swift,但这个概念相当普遍。在python中:

class foo():
    def setBar():
        self.bar = True
    print(str(self.bar)) #prints True
    print(str(bar))      #throws error

我明白了。必须将变量传递给popover,然后返回。以下是我如何以更通用的方式完成的:

    let viewController = "addPopover"
    let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: viewController) as? PopoverViewController
// Above we get the popover, below we set a variable in that popover's class.
    vc?.varThatNeedsToBeStored = sender.view!.tag
然后在我的popover类中的prepare segue方法中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let nextScene = segue.destination as? TacticalCentreViewController
    nextScene?.varThatNeedsToBeStored = varThatNeedsToBeStored
}

现在返回正确的标记值。

一次尝试任何一个,或同时尝试这两个
var selectedP:Int
self.selectedP=sender.tag
。我只是说我还没有实际尝试过。@creatando setPlayer应该在iAction中调用。只有在执行操作时才能在变量中获取值。在此之前,您不能调用setPlayer方法。我在添加
self.
之前尝试过它,但不幸的是,似乎没有什么不同。