我的课堂上没有func。
static func getFirstCharInName(strName: String) -> String {
let firstCharInName = String(strName.first)
return firstCharInName.trim()
}
我遇到了这个错误:
可选类型“字符”的值必须解包为'Character'类型的值
问题出在哪里?
谢谢
答案 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!中。根据需要检索可选变量。