簡體   English   中英

數組和結構的運行時錯誤與迅速

[英]Runtime error with array and struct with swift

我是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”的各項的值隨機分配了!!!! 為什么? 我已經嘗試了所有方法,但是我無法使代碼正常工作,請幫助:(

編輯<-----------幾個小時后,我發現錯誤發生是因為我無法正確初始化struct數組的結構。 我該怎么做? 如果我按照以下方式進行操作,那么當我嘗試在更大的結構體內部的數組中追加一個項目時,會出現此錯誤“變量“ 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))

問題出在哪里?

EDIT EDIT <-----------這是正確的(不編譯)代碼,我已經在堆棧溢出中直接編寫了前一個代碼

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)])

您的代碼有一些錯誤:(1) a未初始化。 您剛剛聲明它為Outside類型。 (2)追加后有一個額外的點。 (3)您需要帶有Inside的默認初始化程序的參數標簽。

struct Inside {
    var something: String
    var somethingElse: Int
}

struct Outside {
    var array = [Inside]() // Don't need to initialize array in your init call
}

var a = Outside()
a.array.append(Inside(something: "aaaa",somethingElse: 1111))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM