我是 Swift 新手,我遇到了一个愚蠢的错误!这是代码
import Foundation
struct Serie {
var nomeEsercizio = ""
var ripetizioni=0
var chili=0.0
var recupero=0
}
struct Superserie {
var elementi: [Serie] = []
}
struct Scheda {
var elementi: [Superserie] = []
}
class Schede {
var elementi: [Scheda] = []
func isEmpty() -> Bool {
return elementi.isEmpty
}
}
class GestoreDiSchede {
static var schedeLocali = Schede()
static var username = "empty"
class func initializeUserDefaults () {
var superserieTemp = Superserie()
var scheda = Scheda()
let schede = Schede()
superserieTemp.elementi.append(Serie(nomeEsercizio: "Spinte manubri", ripetizioni: 10, chili: 10, recupero: 0)) //....more code
我无法发布调试器的屏幕截图,但这里结构“superserieTemp”内变量“elementi”的项目值是随机分配的!!!!为什么? 我已经尝试了所有方法,但无法使代码正常工作,请帮助:(
编辑<------------ 几个小时后,我发现发生错误是因为我无法正确初始化结构数组的结构。我该怎么做? 如果我执行以下操作,那么当我尝试在更大的结构内的数组中附加一个项目时,我会收到此错误“变量‘a’在开始初始化之前通过引用传递”。 “a”变量引用下面的代码。
struct Inside {
var something: String
var somethingElse: Int
}
struct Outside {
var array: [Inside]
init(){
self.array = []
}
}
//then the error is given in the following lines (which are placed inside a method of another class)
var a: Outside
a.array.append.(Inside("aaaa",1111))
问题出在哪里?
编辑编辑<----------- 这是正确的(未编译)代码,我直接在堆栈溢出中编写了前一个代码
struct Inside {
var something: String
var somethingElse: Int
}
struct Outside {
var array: [Inside]
init(){
self.array = []
}
}
//then the error is given in the following lines (which are placed inside a method of another class)
var a: Outside
a.array.append(Inside(something: "aaaa",somethingElse: 1111))
最佳答案
在您的示例代码中,您没有初始化变量a
,但在 Swift 中,每个值都必须在可用之前进行初始化。将最后两行更改为:
var a = Outside()
a.array.append(Inside(something: "aaaa", somethingElse: 1111))
它对我来说很好用(Swift 2.0)
或者您可以删除阻止生成默认初始值设定项的自定义初始值设定项,然后它看起来像这样:
struct Inside {
var something: String
var somethingElse: Int
}
struct Outside {
var array: [Inside]
}
let a = Outside(array: [Inside(something: "aaaa", somethingElse: 1111)])
关于arrays - Swift 中数组和结构的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686153/