我用tableCell制作了一个表格,其中包含学生信息。学生的详细信息显示在单元格中。下面的功能根据单击的单元格显示学生信息。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedRow = feedItems[indexPath.row]
print(selectedRow)
}
单击单元格将显示以下输出:
ID: Optional("101"), Name: Optional("Neha Mahendrabhai Ghala"),Std: Optional("13"), School Name: Optional("N.k. College of commerce arts and mgmt. Malad")
我想提取ID旁边的“ 101”并放入字符串变量。我该怎么办?
答案 0 :(得分:1)
您将获得Optional(“ 101”),因为在使用的结构中ID被声明为optional
。要使用任何可选值,必须首先将其解包。如下所示解包:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedRow = feedItems[indexPath.row]
print(selectedRow.ID ?? 0) //0 or -1 as per want it to be
print(selectedRow.name ?? "")
}
或更好地使用let(可选绑定)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedRow = feedItems[indexPath.row]
if let id = selectedRow.ID {
print(id)
}
if let name = selectedRow.name {
print(name)
}
}
SideNote -不应将ID和名称声明为可选项,因为永远不会有没有ID和名称的学生
我也建议您读一次Optionals,以便迅速了解Optional
答案 1 :(得分:0)
selectedRow
的类型为Student
,因此您可以使用selectedRow.ID
提取此类型。但是,由于您将这个变量设为Optional
,因此您可能需要对此变量进行解包。
答案 2 :(得分:0)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let selectedItem = feedItems[indexPath.row] {
if let id = selectedItem.id {
print(id)
}
}
}
答案 3 :(得分:0)
该值已包装,您只需使用感叹号或提供默认值即可将其解包。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
debugPrint(feedItems[indexPath.row].id ?? "");
}
答案 4 :(得分:-1)
使用此方法获取String:
您可以将此方法粘贴在String的扩展名中以全局使用。
static func getString(_ message: Any?) -> String {
guard let strMessage = message as? String else {
guard let doubleValue = message as? Double else {
guard let intValue = message as? Int else {
guard let int64Value = message as? Int64 else {
return ""
}
return String(int64Value)
}
return String(intValue)
}
let formatter = NumberFormatter()
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 2
formatter.minimumIntegerDigits = 1
guard let formattedNumber = formatter.string(from: NSNumber(value: doubleValue)) else {
return ""
}
return formattedNumber
}
return strMessage.trimWhiteSpaceAndNewLine()
}