ios - 如何使 DateComponentsFormatter.string(from:) 的结果的第一个单词大写?
问题描述
在我的 iOS 项目中,我有一个函数可以将整数值转换为带有“秒”后缀的字符串:
func secondsToString(_ seconds: Int) -> String {
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.second]
return formatter.string(from: DateComponents(second: seconds)) ?? ""
}
这就是我所说的:
print(secondsToString(10)) // Output is "10 seconds"
print(secondsToString(1)) // Output is "1 second"
但是,我需要将secondsToString
' 结果的第一个单词大写,如下所示:
print(secondsToString(10)) // Output is "10 Seconds"
print(secondsToString(1)) // Output is "1 Second"
我怎么解决这个问题?我应该更改 的某些属性DateComponentsFormatter
吗?
解决方案
只需.capitalized
在格式化字符串的末尾添加即可。
func secondsToString(_ seconds: Int) -> String {
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.second]
return formatter.string(from: DateComponents(second: seconds))?.capitalized ?? ""
}
注意:此解决方案将从方法返回的所有单词大写。对于您的用例,这应该足够好,因为即使您添加更多时间单位,如果我将一个大写,我更愿意将它们全部大写。
因此,如果您要以某种方式更改结果并且只希望第一个单词大写,您可以试试这个:(第一个单词表示第一个包含字母的单词)
func secondsToString(_ seconds: Int) -> String {
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.second, .hour, .day]
let string = formatter.string(from: DateComponents(second: seconds)) ?? ""
var substrings = string.components(separatedBy: " ")
// Using for...each would make the iterating element a constant and hence i would have to find the index and replace it using the index
for i in 0...substrings.count {
if let firstCharacter = substrings[i].unicodeScalars.first, CharacterSet.letters.contains(firstCharacter) {
substrings[i] = substrings[i].capitalized
break
}
}
let finalString = substrings.joined(separator: " ")
return finalString
}
推荐阅读
- python - python 理解生成器的意外行为
- python-3.x - 不同子组的熊猫中位数
- ios - 如何在 Swift 包中为 UIViewRepresentable 编写测试
- python - MongoDB - 在单个查询中提取和更新
- r - 从指数中的个股回测 R 中的动量策略
- python - Python模块导入问题:不同位置的导入语句
- iis - 访问域时的 URL 重定向
- java - 未加载 Spring Junit 配置类
- azure-functions - 尝试在 Azure 函数中使用 MicrosoftTeams PowerShell
- python - 无法对与给定条件匹配的列中的值求和