繁体   English   中英

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

[英]How do I pass data between two scenes in Swift?

我有两个场景,我想使用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移动到另一个场景,即我的LoserScene。

我的loserScene设置如下:

    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)




    }
}

我正在尝试打印“ toPass”以测试字符串segue,但是我得到的结果为零。

好! 因此,不要使用segue。 您无法使用SKSCENE。 我使用了一个结构。 我将结构放置在我想要传递数据的场景之一之外,并确保将数据馈入结构中。 然后,我从另一个场景访问了该结构,它运行完美!

struct Variables {
static var aVariable = 0
}

这是struct ^,我将其设置为0,但是当在游戏结束时记录得分时,它将自动更新。 然后在另一个场景中像这样访问它:

print(Variables.aVariable)

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

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

例如创建一些函数;

// 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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM