如何在Swift中的两个场景之间传递数据?

时间:2015-08-29 20:41:29

标签: ios iphone swift segue

我有两个场景,我想使用segue将单个变量传递给另一个场景。我试过但不幸的是我见过的所有教程都在处理故事板。我没有使用故事板。我正以编程方式完成所有这些工作。

这是我想要初始化的segue:

func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "segueTest") {
        var lose = segue.destinationViewController as! loserScene;

        lose.toPass = scoreLabelNode.text

    }
}

失败者场景是我的第二个场景 scoreLabelNode.text是我用作分数的NSTimer的文本。

我想将scoreLabelNode.text移动到另一个场景,这是我的失败者。

我的失败者是如此设置的:

    import SpriteKit
import Foundation

let GameOverLabelCategoryName = "gameOverLabel"

class loserScene: SKScene {
    var toPass: String!
    var scoreLabel = SKLabelNode(fontNamed:"[z] Arista Light")



    override func didMoveToView(view: SKView) {
        var gameOver = SKSpriteNode(imageNamed: "gameover.png")
        gameOver.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2)
        self.addChild(gameOver)
        println(toPass)




    }
}

我正在尝试打印“通过'测试字符串segue,但我只是没有。

2 个答案:

答案 0 :(得分:5)

OK!所以不要使用segue。你不能用SKSCENE做什么。我使用了一个结构。我把结构放在我想要传递数据的场景之外,并确保数据被输入到结构中。然后,我从另一个场景访问了结构,它运行得很好!

struct Variables {
static var aVariable = 0
}

这是结构^我将它设置为0但是在我的游戏运行结束时记录得分时它会自动更新。 然后我在另一个场景中访问它:

print(Variables.aVariable)

这将在我的新场景中打印结构中的变量。我也可以将这个结构转换为字符串并将其用于labelnode。

答案 1 :(得分:0)

当您从prepareForSegue方法发送值时,您的toPass字符串返回nil,因为未初始化

创建一些函数,例如;

// Do whatever you need with the toPass variable.
func printToPassValue(){
     print(toPass)
}

将属性观察者添加到toPass变量中。像这样;

var toPass: String? {
    willSet {
     printToPassValue() // Call your function
     }
}

并将此函数添加到viewDidLoad方法。

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