如何确定并从 swift 中具有数组的结构中提取正确的数据
How to determine, and pull the correct Data from a structures with Arrays in swift
我有两个 table 视图,这些视图是根据单元格从数组中提取的数据填充的 chosen.I 引入了结构,最初只是使用字符串数组,我正在尝试提取正确的数据并用 them.So 填充正确的字段 我有这个结构:
struct DetailView {
var detailTitle : String
//var equipmentImage = [UIImageView?]()
var serN : String
var dc : String //deck Code
var an : String //area name
var sn : String //Space number
var manuf : String
var qty : String
init(detailTitle:String,dc:String,serN:String,an:String,sn:String,manuf:String,qty:String){
self.detailTitle = detailTitle
self.dc = dc
self.an = an
self.serN = serN
self.sn = sn
self.manuf = manuf
self.qty = qty
//
}
}
我有这个数组:
//we are adding elements on the detailView structure
var thirdArray : [DetailView]= []
我填充它:
thirdArray = thirdArray = [[
DetailView(detailTitle: "A", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "APC", qty: "2")],
[DetailView(detailTitle: "B", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Apple", qty: "12"),
DetailView(detailTitle: "D", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Apple", qty: "7"),
DetailView(detailTitle: "E", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Apple", qty: "1")],
[DetailView(detailTitle: "F", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Autonomic", qty: "1")]]
然后我在填充它们的地方执行 segue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let row = self.tableView?.indexPathForSelectedRow?.row ?? 0
let destViewController = segue.destination as! SecondTableViewController
var detailArray : [DetailView]
detailArray = thirdArray
destViewController.detailVcArray = detailArray
}
在我的第二个 table 视图中,我有:
var detailVcArray : [DetailView] = []
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destViewController = segue.destination as! DetailsViewController
let row = self.tableView?.indexPathForSelectedRow?.row ?? 0
var lastArray : [DetailView]
lastArray = detailVcArray
destViewController.displayDetail = lastArray[row]
//here I get this error "Thread 1: Fatal error: Index out of range"
}
最后,在我的 DetailsViewController 上,我想用我的结构中的 dc 数据填充 dc textField,用 detailTitle 等填充 textView。但是应用程序崩溃了。
var displayDetail : DetailView?
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var serN: UITextField!
@IBOutlet weak var dc: UITextField!
@IBOutlet weak var an: UITextField!
@IBOutlet weak var sn: UITextField!
@IBOutlet weak var manuf: UITextField!
@IBOutlet weak var qty: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textView.text = displayDetail?.detailTitle
dc.text = displayDetail?.dc
serN.text = displayDetail?.serN
an.text = displayDetail?.an
sn.text = displayDetail?.sn
manuf.text = displayDetail?.manuf
qty.text = displayDetail?.qty
updateTextView()
}
我收到此错误“线程 1:致命错误:索引超出范围”,当我从我的最后一台电视中选择一个单元格并尝试在我的最后一台 VC 上显示数据时,应用程序崩溃了。 =17=]
我建议围绕您需要显示的内容重新设计您的数据模型。最后,你想要 2 个字符串,所以创建那个结构。
struct Detail {
var detailTitle: String
var dc: String
}
您想将它们组织成数组数组以匹配您的两个 table。
let detailArray = [[Detail(detailTitle: "A", dc: "BO")],
[Detail(detailTitle: "B", dc: "Apple"), Detail(detailTitle: "C", dc: "Apple"), Detail(detailTitle: "D", dc: "Apple")],
[Detail(detailTitle: "A", dc: "BD")]
// ...
]
您的 segue 选择了正确的数组并将其传递给第二个 table 的数据源,即...
var detailVcArray: [Detail]
最后一个控制器收到它需要的东西...
var displayDetail: Detail
届时您可以使用这些值。
textView.text = displayDetail.detailTitle
dc.text = displayDetail.dc
我有两个 table 视图,这些视图是根据单元格从数组中提取的数据填充的 chosen.I 引入了结构,最初只是使用字符串数组,我正在尝试提取正确的数据并用 them.So 填充正确的字段 我有这个结构:
struct DetailView {
var detailTitle : String
//var equipmentImage = [UIImageView?]()
var serN : String
var dc : String //deck Code
var an : String //area name
var sn : String //Space number
var manuf : String
var qty : String
init(detailTitle:String,dc:String,serN:String,an:String,sn:String,manuf:String,qty:String){
self.detailTitle = detailTitle
self.dc = dc
self.an = an
self.serN = serN
self.sn = sn
self.manuf = manuf
self.qty = qty
//
}
}
我有这个数组:
//we are adding elements on the detailView structure
var thirdArray : [DetailView]= []
我填充它:
thirdArray = thirdArray = [[
DetailView(detailTitle: "A", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "APC", qty: "2")],
[DetailView(detailTitle: "B", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Apple", qty: "12"),
DetailView(detailTitle: "D", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Apple", qty: "7"),
DetailView(detailTitle: "E", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Apple", qty: "1")],
[DetailView(detailTitle: "F", dc: "", serN: "Info required", an: "Area Name required", sn: "Space Number Required", manuf: "Autonomic", qty: "1")]]
然后我在填充它们的地方执行 segue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let row = self.tableView?.indexPathForSelectedRow?.row ?? 0
let destViewController = segue.destination as! SecondTableViewController
var detailArray : [DetailView]
detailArray = thirdArray
destViewController.detailVcArray = detailArray
}
在我的第二个 table 视图中,我有:
var detailVcArray : [DetailView] = []
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destViewController = segue.destination as! DetailsViewController
let row = self.tableView?.indexPathForSelectedRow?.row ?? 0
var lastArray : [DetailView]
lastArray = detailVcArray
destViewController.displayDetail = lastArray[row]
//here I get this error "Thread 1: Fatal error: Index out of range"
}
最后,在我的 DetailsViewController 上,我想用我的结构中的 dc 数据填充 dc textField,用 detailTitle 等填充 textView。但是应用程序崩溃了。
var displayDetail : DetailView?
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var serN: UITextField!
@IBOutlet weak var dc: UITextField!
@IBOutlet weak var an: UITextField!
@IBOutlet weak var sn: UITextField!
@IBOutlet weak var manuf: UITextField!
@IBOutlet weak var qty: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textView.text = displayDetail?.detailTitle
dc.text = displayDetail?.dc
serN.text = displayDetail?.serN
an.text = displayDetail?.an
sn.text = displayDetail?.sn
manuf.text = displayDetail?.manuf
qty.text = displayDetail?.qty
updateTextView()
}
我收到此错误“线程 1:致命错误:索引超出范围”,当我从我的最后一台电视中选择一个单元格并尝试在我的最后一台 VC 上显示数据时,应用程序崩溃了。 =17=]
我建议围绕您需要显示的内容重新设计您的数据模型。最后,你想要 2 个字符串,所以创建那个结构。
struct Detail {
var detailTitle: String
var dc: String
}
您想将它们组织成数组数组以匹配您的两个 table。
let detailArray = [[Detail(detailTitle: "A", dc: "BO")],
[Detail(detailTitle: "B", dc: "Apple"), Detail(detailTitle: "C", dc: "Apple"), Detail(detailTitle: "D", dc: "Apple")],
[Detail(detailTitle: "A", dc: "BD")]
// ...
]
您的 segue 选择了正确的数组并将其传递给第二个 table 的数据源,即...
var detailVcArray: [Detail]
最后一个控制器收到它需要的东西...
var displayDetail: Detail
届时您可以使用这些值。
textView.text = displayDetail.detailTitle
dc.text = displayDetail.dc