向Array添加新元素 - Swift 3

时间:2017-03-17 15:49:38

标签: core-data swift3

我有一个带有2个变量的Tableviewcontroller BeamsNameVC 名称号码。 例如,如果数字是7,如果我单击此View控制器中的任何行,它将转到另一个TableView控制器 SpansListVC ,而不是它将显示7行: S1,S2,S3,S4,S5,S6& S7

我想保存这些数据,所以我创建了两个swift文件:

class StructureElement: NSObject, NSCoding {

var name = ""
var nbrSpans = ""
var spans = [LoadDetailsForEachSpan]()

class LoadDetailsForEachSpan: NSObject, NSCoding {

var i_SpanName = ""
var i_Spanlength = ""
var i_ConcentratedLoadForEachSpans = [ConcentratedLoadForEachSpan]()

我创建了一个包含以下内容的协议:

let spanNbr = Int(structureElement[newRowIndex].nbrSpans)
let newElementDetailSpan = LoadDetailsForEachSpan()
    for i in 0...spanNbr! {
        newElementDetailSpan.i_SpanName = "S" + " \(i)"
        structureElement[newRowIndex].spans.append(newElementDetailSpan)
    }

如果我运行该应用程序,它将转到 * SpansListVC * ,但所有值都是最后一个 i

实施例

如果名称 测试7 且跨度数为 7 ,我将会在 > * [Spans] * 7 具有相同名称的值:

spans[0] = S 7  
spans[1] = S 7  
....

上述代码有任何错误吗?

2 个答案:

答案 0 :(得分:1)

欢迎来到可变数据对象的地狱;)。您正在创建单个LoadDetailsForEachSpan实例并将该实例多次添加到该数组,同时每次迭代循环时设置该相同实例i_SpanName属性。您可能希望将实例创建拉入循环:

for i in 0...spanNbr! {
    let newElementDetailSpan = LoadDetailsForEachSpan()
    newElementDetailSpan.i_SpanName = "S" + " \(i)"
    structureElement[newRowIndex].spans.append(newElementDetailSpan)
}

答案 1 :(得分:0)

感谢@thm的回复。

但是,我找到了另一种解决方案,如下所示:

    var spanDetailAndLoadItem: [SpanDetailsAndLoads] = []

    for var i in 1...nbr! {
        let item = SpanDetailsAndLoads(name: "S\(i) - S\(i + 1)")
        spanDetailAndLoadItem.append(item)
    }
    self.spans = spanDetailAndLoadItem