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

Posted

技术标签:

【中文标题】如何在 Swift 中的两个场景之间传递数据?【英文标题】:How do I pass data between two scenes in Swift? 【发布时间】:2015-08-29 20:41:29 【问题描述】:

我有两个场景,我想使用 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是这样设置的:

    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,但我得到了 nil。

【问题讨论】:

长话短说,我需要能够在不使用情节提要的情况下以编程方式将数据传递到另一个场景。 在这里查看我的答案:***.com/questions/31737746/… 【参考方案1】:

好的!所以不要使用segue。 SKSCENE 无法做到这一点。我用了一个结构。我将结构放在我希望从中传递数据的场景之一之外,并确保将数据输入到结构中。然后我从另一个场景访问了这个结构,它完美地工作了!

struct Variables 
static var aVariable = 0

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

print(Variables.aVariable)

这会在我的新场景中打印结构中的变量。我也可以把这个结构体变成一个字符串,并把它用作一个标签节点。

【讨论】:

我使用了类似的方法。目标 ViewController 文件中只有一个静态变量,而不是使用结构。【参考方案2】:

您的 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()

【讨论】:

不幸的是仍然返回 nil。我可能不得不采取不同的方法来传递变量 我正在使用不允许 segue 的 SKScene,所以我将不得不重做所有这些

以上是关于如何在 Swift 中的两个场景之间传递数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3.0 中的控制器之间传递 JSON 数据?

在没有Segues的故事板之间传递变量 - Swift

Swift 在场景之间传递变量?

如何在 Swift 中的视图控制器之间传递数据?

在 Swift 中的视图控制器之间传递数据

在没有 Segues 的故事板之间传递变量 - Swift