迅速3/4冲刺到骆驼案(Snake to camelCase)

Tom*_*mer 0 swift swift3

我试图对驼峰的情况进行简单的冲刺,所以:"这是我的身份"将成为swift 3(或4)中的"thisIsMyId".

无论我做什么,我找不到一个优雅的方式来做到这一点..:以下不起作用:

str.split(separator: "-").enumerated().map { (index, element) in
    return index > 0 ? element.capitalized : element
}.reduce("", +)
Run Code Online (Sandbox Code Playgroud)

它哭泣所有的东西.我相信有一个简单的方法......任何人?

Sul*_*han 6

你的代码几乎是正确的.以下是我发现的最易读的实现:

let str: String = "this-is-my-id"

let result = str
    .split(separator: "-")  // split to components
    .map { String($0) }   // convert subsequences to String
    .enumerated()  // get indices
    .map { $0.offset > 0 ? $0.element.capitalized : $0.element.lowercased() } // added lowercasing
    .joined() // join to one string

print(result)
Run Code Online (Sandbox Code Playgroud)


Pey*_*nkh 6

只是用 Swift 4.1 更好地实现了@sulthan 的答案。

extension String {
    func camelCased(with separator: Character) -> String {
        return self.lowercased()
            .split(separator: separator)
            .enumerated()
            .map { $0.offset > 0 ? $0.element.capitalized : $0.element.lowercased() }
            .joined()
    }
}
Run Code Online (Sandbox Code Playgroud)