let first = postalText.text?[(postalText.text?.startIndex)!]
let second = postalText.text?[(postalText.text?.index((postalText.text?.startIndex)!, offsetBy: 1))!]
let third = postalText.text?[(postalText.text?.index((postalText.text?.startIndex)!, offsetBy: 2))!]
我试图将FIRST和THIRD字符大写,然后将所有3个字符合并为一个新字符串 但.uppercase和.capitalized并不起作用。
另外,我如何检查SECOND字符是否为数字?
答案 0 :(得分:5)
.uppercased
和.capitalized
仅适用于字符串,您显示的内容为Character
。您可以将Character
转换为String
并将其设为大写。
let firstCapitalized = String(first!).capitalized
如果您想检查Character
是否为int,您也可以将其设为String
,然后检查String
是否为Int
非零:
if Int("\(second!)") != nil {
print("Is Integer")
}
这些案例都假设你的第一,第二和第三都是非零的,并且强制拆开它们。
修改强> 我有一些空闲时间,并且在SO上忽略了一些旧帖子,我意识到我发布的这个答案并没有使用最好的编码形式。首先,强行打开任何东西总是一个坏主意(这是未来崩溃的一个秘诀),所以对于第一部分。做这样的事情:
let firstCapitalized = String(first ?? "").capitalized
这至少会让你在first == nil
的情况下退出,然后你就会被一个空字符串困住。
对于第二部分,我将使用可选的展开而不是if Int("\(second!)") != nil
。我会说更合适的方法是这样的:
if let second = second, let stringConvertedToInteger = Int("\(String(second))") {
print("\(stringConvertedToInteger) is an integer")
} else {
print("Either second is nil, or it cannot be converted to an integer")
}
这将自动解包字符second
,如果它有值,则将其转换为整数(如果是1,则通过可选的解包来检查)。这是最安全的方法,可以避免遇到任何运行时错误。