我制作了这款纸牌游戏应用。因此,首先游戏随机化四张卡片,这些卡片稍后将在不同的视图控制器中使用。我的第二个视图控制器将显示和使用随机卡。我做的是我在第一个视图控制器中有一个arc4random函数并将其设置为一个变量,然后我想使用这些变量在第二个视图控制器中显示。问题是我无法使用从一个视图控制器到另一个视图控制器的变量。
这是我在第一个视图控制器中的randomize var:
@IBAction func randomizeButtonTapped(_ sender: UIButton) {
//randomize function
var firstNumber = arc4random_uniform(13) + 1
firstCardImageView.image = UIImage(named: "card\(firstNumber)")
var secondNumber = arc4random_uniform(13) + 1
secondCardImageView.image = UIImage(named: "card\(secondNumber)")
var thirdNumber = arc4random_uniform(13) + 1
thirdCardImageView.image = UIImage(named: "card\(thirdNumber)")
var fourthNumber = arc4random_uniform(13) + 1
forthCardImageView.image = UIImage(named: "card\(fourthNumber)")
这是我第二个视图控制器上的代码:
@IBAction func firstButtonTapped(_ sender: UIButton) {
label.text = label.text + String("\(firstNumber)")
}
答案 0 :(得分:1)
在FirstVC中,将变量作为全局变量添加到类的顶部:
var cards = [Int]()
在SecondVC中创建相同的变量:
var cards = [Int]()
在FirstVC中添加此方法:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if let secondVC = segue.destination as? YourSecondVC {
secondVC.cards = self.cards
}
}
此方法将在显示SecondVC之前调用。基本上它将卡从第一个VC分配给第二个VC的卡。
然后你的方法将如下所示:
@IBAction func firstButtonTapped(_ sender: UIButton) {
label.text = label.text + String("\(cards[0])")
}
答案 1 :(得分:0)
您需要使用此功能,然后使用标识符从第一个视图控制器到第二个视图控制器设置一个segue。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.identifier {
case "YOUR_SEGUE_IDENTIFIER"?:
let destination = segue.destination as! UIViewController()
destination.VARIABLE_NAME_ON_NEXT_VC = VARIABLE_YOU_ARE_PASSING
default:
print("dont know where to send in segue")
}
}
答案 2 :(得分:0)
你可以采用的一种方法是创建一个辅助类来处理卡的随机化。然后在不同的视图控制器中可以使用相同的数字。像这样:
class CardService {
static let instance = CardService()
private(set) var cards = [UInt32]()
func randomizeCards() {
cards.removeAll()
for _ in 0...3 {
let num = arc4random_uniform(13) + 1
cards.append(num)
}
}
}
然后在第一个视图控制器中点击按钮时调用:
CardService.instance.randomizeCards()
在您想要使用数字的视图控制器中,您可以通过索引访问它们,如下所示:
CardService.instance.cards[0]
这里的好处是您可以从任何视图控制器访问带有或不带segue的数字,也可以从任何视图控制器随机化这些卡,而无需复制处理随机化的功能。