Ios 带数组的Swift 2结构
我不熟悉Swift和制作游戏(也不熟悉一般的编码),目前我想在两个Ios 带数组的Swift 2结构,ios,arrays,swift,struct,static,Ios,Arrays,Swift,Struct,Static,我不熟悉Swift和制作游戏(也不熟悉一般的编码),目前我想在两个游戏场景s之间传递一个变量。在做了一些研究之后,我得出了一个结论,我需要一个带有[int]()的结构来保存由于某种原因而需要的数字,而我无法将值分配到my integer数组generatedSequenceArray 我的结构: struct generatedSequenceForGameScene { static var generatedSequenceArray = [Int]() } 在我的一个游戏场景类
游戏场景
s之间传递一个变量。在做了一些研究之后,我得出了一个结论,我需要一个带有[int]()
的结构来保存由于某种原因而需要的数字,而我无法将值分配到my integer数组generatedSequenceArray
我的结构:
struct generatedSequenceForGameScene {
static var generatedSequenceArray = [Int]()
}
在我的一个游戏场景
类中,我初始化了我的生成的场景序列
结构
对象:
var generatedSequence = generatedSequenceForGameScene()
我调用的方法是:
func pickNumbers(){
for var x = 0; x < highLevel; ++x{
generatedSequence.generatedSequenceArray.append(Int(arc4random_uniform(10)))
print(generatedSequence.generatedSequenceArray)
}
}
这给了我想要的结果。
注意:pickNumber
方法在名为loadView()
的方法中调用,该方法位于程序的didMoveToView
方法中
首先,结构中的static
关键字使generatedSequenceArray
成为静态属性。这意味着无论你叫它什么地方它都是一样的。这不是你想要的
其次,除非您计划向结构添加更多属性,否则它没有存在的理由。为什么要把它包装成一个结构呢?为什么不直接传递整数数组(您选择的数字)
第三,类型名称应该是适当的大小写。所以generatedsequenceforamescene
应该是generatedsequenceforamescene
)。我不确定到底是什么不适合你。我猜你在从一个游戏场景到另一个游戏场景的序列共享上有困难。如果这是问题所在,也许以下方法会有所帮助:
struct Sequence {
var seqArray = [Int]()
mutating func pickNumbers() {
for var x = 0; x < 10; ++x {
seqArray.append(Int(arc4random_uniform(10)))
}
print( "picked: \(seqArray)" )
}
}
class GameScene {
var s = Sequence()
}
var g1 = GameScene()
var g2 = GameScene()
g1.s.pickNumbers()
g2.s.seqArray = g1.s.seqArray
print( g2.s.seqArray )
结构序列{
var seqArray=[Int]()
变异func pickNumbers(){
对于变量x=0;x<10;++x{
seqArray.append(Int(arc4random_uniform(10)))
}
打印(“拾取:\(seqArray)”)
}
}
课堂游戏场景{
var s=序列()
}
var g1=游戏场景()
var g2=游戏场景()
g1.s.PickNumber()
g2.s.seqArray=g1.s.seqArray
打印(g2.s.seqArray)
我之所以使用静态
变量,是因为我希望它无处不在。目的是让我可以将这个整数数组传递到另一个场景,在那里它可以做其他事情。我还发现这个例子,我也不知道任何其他方式传递一个变量或数组到一个单独的场景文件。(我一点也不使用故事板)谢谢你,我在正确的外壳上犯了错误,不过我一定会改正的。否,否::-D如果要在控制器之间传递某些内容,请确保为下一个控制器创建并保留一个控制器的引用,或者创建一个可以从任何位置访问的单例,该单例生成并提供公共数据。您的错误使用了静态
。正如我之前所说,这不是你想要的。谢谢你,我以前听过术语singleton(我知道它是一个只能生成一次的类的实例),但我不知道如何使用它(在swift或其他任何地方),我该如何生成和使用它?(我使用的不是控制器,而是我制作的‘SKScene’的子类(在我称它们为《意外事件》(对不起)中的GameSecene
)之前),请仔细阅读:(首先模式在ObjC中给出,然后在Swift中给出)…您的想法是通过调用类似于GameManager.sharedInstance.gameSequence
(其中gameSequence
是GameManager
的一个属性)的内容,使某个game manager对象从任何地方生成并提供您的游戏数据。我假设我只是将我所有的方法和变量放在静态let sharedInstance
下。我仍然遇到另一个问题,我用singleton制作的SKScene
在游戏开始时运行。当我尝试在另一个场景中使用我的“Sequence”变量时,会看到序列(数组为空)即使当我运行我的第一个SKScene
时,“Sequence”变量包含元素,这是我的,但我不想创建GameScene
对象,我似乎也犯了一个错误GameScene
(抱歉)我指的是SKScene
的子对象。在我的程序中,我希望子对象SKScene
根据用户当前处于x
的级别生成一个随机整数序列,然后将同一数组转移到另一个SKScene
,以便我可以继续使用它。(我还希望我的变量highestLevel
对于每个SKScene
都是相同的,并且设备应该记住它。(我相信NSUserDefaults)如果你想要两个变量,highestLevel
和Sequence
在应用程序的所有使用中都是相同的,那么就将它们设为全局变量。当你说“设备应该记住它”时,听起来好像你想寻找与搜索匹配的SO(StackOverflow)答案。
struct Sequence {
var seqArray = [Int]()
mutating func pickNumbers() {
for var x = 0; x < 10; ++x {
seqArray.append(Int(arc4random_uniform(10)))
}
print( "picked: \(seqArray)" )
}
}
class GameScene {
var s = Sequence()
}
var g1 = GameScene()
var g2 = GameScene()
g1.s.pickNumbers()
g2.s.seqArray = g1.s.seqArray
print( g2.s.seqArray )