在Swift中提取并转换为字符串

时间:2018-12-04 10:08:31

标签: swift xcode uitableview

我用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”并放入字符串变量。我该怎么办?

5 个答案:

答案 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)
      }
    }
   }
  1. 将变量命名为ID是错误的做法
  2. 使用selectedItem,因为selectedRow表示一行。
  3. 解开可选内容使用if或guard。我在这里使用if

答案 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()
}