Swift 3大写字符串

时间:2017-02-12 00:10:12

标签: swift string

    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字符是否为数字?

1 个答案:

答案 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,则通过可选的解包来检查)。这是最安全的方法,可以避免遇到任何运行时错误。