我有一个带有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
....
上述代码有任何错误吗?
答案 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