【问题标题】:Swift 2 : Iterating and upper/lower case some charactersSwift 2:迭代和大写/小写一些字符
【发布时间】:2015-10-30 12:35:22
【问题描述】:

我想通过将一些字符转换为大写,将其他一些字符转换为小写来修改 Swift 字符串。

在 Obj-c 中我有以下内容:

- (NSString*) lowercaseDestination:(NSString*) string {
    NSUInteger length = string.length;
    unichar buf[length+1];
    [string getCharacters:buf];

    BOOL up = true;
    for (int i=0; i< length ; i++) {
        unichar chr = buf[i];

        if( .... ) {
            buf[i] = toupper(chr);
        } else {
            buf[i] = tolower(chr);
        }
    }
    string = [NSString stringWithCharacters:buf length:length];
    return string;

你会如何在 Swift 2 中做到这一点?

我没有找到任何Character 方法来增大或减小大小写。

可以选择包含 1 个字符的 String 数组吗? (然后使用String方法对每个String进行上下调整

【问题讨论】:

    标签: string swift swift2 uppercase


    【解决方案1】:

    String 有一个 upperCaseString 方法,但 Character 没有。 原因是在像德语这样的外来语言中,将单个 字符转大写可以产生多个字符:

    print("ß".uppercaseString) // "SS"
    

    toupper/tolower 函数不是 Unicode 安全的,也不是 在 Swift 中可用。

    所以你可以枚举字符串字符,将每个字符转换为 一个字符串,将其转换为大写/小写,然后连接结果:

    func lowercaseDestination(str : String) -> String {
        var result = ""
        for c in str.characters {
            let s = String(c)
            if condition {
                result += s.lowercaseString
            } else {
                result += s.uppercaseString
            }
        }
        return result
    }
    

    可以更简洁地写成

    func lowercaseDestination(str : String) -> String {
        return "".join(str.characters.map { c -> String in
            let s = String(c)
            return condition ? s.lowercaseString : s.uppercaseString
        })
    }
    

    回复你的评论:如果条件需要检查多个 字符,那么您可能想要创建一个包含所有字符的 array 第一:

    func lowercaseDestination(str : String) -> String {
    
        var result = ""
        let characters = Array(str.characters)
        for i in 0 ..< characters.count {
            let s = String(characters[i])
            if condition {
                result += s.lowercaseString
            } else {
                result += s.uppercaseString
            }
        }
        return result
    }
    

    【讨论】:

    • 提醒我在 Swift 2 中对 String 的更新:developer.apple.com/swift/blog/?id=30
    • 假设我需要提前 1 或 2 个字符来确定我的情况。这将如何影响功能?
    • @MatthieuRiegler:查看更新。附加的代码更接近于您的 Objective-C 版本,因此希望对您有所帮助。
    • 像德语这样的外来语言(被 2 亿人使用);我喜欢这样 :D 感谢您让我有一个美好的一天。
    • @JiriTrecak 这很有趣,对吧?我说乌克兰语,大约有 3000 万人使用。只有 3.2% 的地球人口会说德语和乌克兰语
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2012-01-03
    • 2020-03-01
    • 1970-01-01
    • 2014-01-29
    • 2022-11-07
    相关资源
    最近更新 更多