如何获得名称中的第一个字符

时间:2019-02-18 03:38:10

标签: swift4

我的课堂上没有func。

static func getFirstCharInName(strName: String) -> String {

   let firstCharInName = String(strName.first)

    return firstCharInName.trim()
}

我遇到了这个错误:

可选类型“字符”的值必须解包为'Character'类型的值

问题出在哪里?

谢谢

5 个答案:

答案 0 :(得分:0)

<tr *ngFor="let row of invoices_items">
  <td>{{row.date}}</td>
  <td>{{row.invoice_number}}</td>
  <td>{{row.total}}</td>
  <td>{{row.amount_due}}</td>
  <td class="text-right col-md-2">
  <input type="text" class="form-control" id="payreported" name="payreported" [(ngModel)]="row.payreported" (blur)="checkamount()"                                                  placeholder="Enter Payment Amt.">
   </td>
 </tr>

答案 1 :(得分:0)

此错误意味着表达式具有尚未解包的可选值(值可以为nil),strName.first返回可选值Character?,但是您的函数要求返回类型为{ {1}},这不是可选类型。

因此,要解决此问题,您需要解开可选值String,似乎您不熟悉optionals,这是您的案例的代码(请从两个选项中选择一个) ):

strName.first

PS。我对您的问题中的函数func getFirstCharInName(strName: String) -> String { // option 1: force unwrap - can cause fatal error return String(strName.first!) // option 2: optional binding if let firstCharInName = strName.first { return String(firstCharInName) } else { // if the optional value is nil, return an empty string return "" } } 并不真正了解,但是如果您要去除trim()之类的空格,则可以执行以下操作:

"  "

答案 2 :(得分:0)

您可以执行以下操作:

extension String {

    var firstLetter: String {

        guard !self.isEmpty else { return "" }
        return String(self[self.startIndex...self.startIndex])
    }
}

然后

let name = "MilkBottle"
let first = name.firstLetter // "M"

答案 3 :(得分:0)

只需使用prefix避免使用可选选项,这是完全安全的。如果没有第一个字符,您将得到一个空字符串。

static func getFirstChar(in name: String) -> String { // the function name getFirstChar(in name is swiftier
    return String(name.prefix(1))
}

我不知道trim函数应该做什么。

答案 4 :(得分:0)

这意味着可选类型'Character?'的值(作为代码strName.first的一部分的结果),必须将其解压缩为'Character'类型的值,然后才能将其转换为String类型。 您可以使用以下变体:

func getFirstCharInName(strName: String) -> String {
   return strName.count != 0 ? String(strName.first!) : ""
}

如您所见,感叹号位于字符串 strName.first!中。根据需要检索可选变量。