高效地将字符串拆分为数组并修剪每个值 - Swift

3

为了更好地理解Swift,我希望看到是否有更有效的方法来编写下面的代码。该代码应将self.categories字符串转换为数组(值由逗号分隔),并修剪每个值,然后返回数组。

func get_categories() -> Array<String>{
    let categories = self.categories!.componentsSeparatedByString(",")
    var categories_to_return = Array<String>()
    for category in categories {
        categories_to_return.append(category.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()))
    }
    return categories_to_return
}

我怀疑我在这里做错了什么 - 或许我不需要创建两个单独的数组?也许还有其他我没见过的快捷方式?非常感谢!

2个回答

5
您可以直接在componentsSeparatedByString的结果上使用map,像这样,并且不使用其他变量返回它:
func get_categories() -> Array<String>{
    return self.categories!.componentsSeparatedByString(",").map { $0.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) }
}

注意:在map闭包中,$0表示来自组件数组的当前项目。也可以像这样编写:

func get_categories() -> Array<String>{
    return self.categories!
        .componentsSeparatedByString(",")
        .map { word in word.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) }
}

1
这是一个更通用的函数,适用于一般情况。
func getSplitAndTrimmed(text: String) -> Array<String> {
    return text.componentsSeparatedByString(",").map { $0.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) }
}

这个功能和Eric写的一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接