Swift 3/4 dash to camel case (Snake to camelCase)
Swift 3/4 dash to camel case (Snake to camelCase)
我正在尝试对驼峰式大小写进行简单的破折号,因此:
"this-is-my-id" 将在 swift 3(或 4)中变为 "thisIsMyId"。
无论我做什么,我都找不到足够优雅的方式来做..:
以下无效:
str.split(separator: "-").enumerated().map { (index, element) in
return index > 0 ? element.capitalized : element
}.reduce("", +)
它哭了一大堆东西。我相信有一个足够简单的方法......有人吗?
您可以根据破折号“-”拆分字符串(创建字符串数组)并将其元素与所需大小写组合:
let myString = "this-is-my-id"
let newString = myString.split(separator: "-").reduce("", { [=10=] + .capitalized })
print(newString) // "ThisIsMyId"
如果您通过创建新字符串来解构 String.Subsequence
元素,则您的语法有效:
str.split(separator: "-").enumerated().map { (index, element) in
return index > 0 ? String(element).capitalized : String(element)
}.joined() // better than `reduce`
您的代码几乎是正确的。以下是我发现的最具可读性的实现:
let str: String = "this-is-my-id"
let result = str
.split(separator: "-") // split to components
.map { String([=10=]) } // convert subsequences to String
.enumerated() // get indices
.map { [=10=].offset > 0 ? [=10=].element.capitalized : [=10=].element.lowercased() } // added lowercasing
.joined() // join to one string
print(result)
您可以遍历字符(String
是字符的集合),同时持有一个标志,告诉字符是否在破折号之后,以便将其大写:
let dashCase = "this-is-my-id"
let camelCase = dashCase.reduce(into: ("", false)) {
// mark the dash
guard != "-" else { [=10=].1 = true; return }
[=10=].0 += [=10=].1 ? String().uppercased() : String()
// reset the flag so we don't capitalize the next ones
[=10=].1 = false
}.0
print(camelCase) // thisIsMyId
所有这些答案的组合将导致以下最短方式(我认为 - 只有 2 次交互):
let str: String = "this-is-my-id"
let result = str.split(separator: "-").reduce("") {(acc, name) in
"\(acc)\(acc.count > 0 ? String(name.capitalized) : String(name))"
}
谢谢大家!
Swift 4.1.
更好地实现了@sulthan 的回答
extension String {
func camelCased(with separator: Character) -> String {
return self.lowercased()
.split(separator: separator)
.enumerated()
.map { [=10=].offset > 0 ? [=10=].element.capitalized : [=10=].element.lowercased() }
.joined()
}
}
我正在尝试对驼峰式大小写进行简单的破折号,因此: "this-is-my-id" 将在 swift 3(或 4)中变为 "thisIsMyId"。
无论我做什么,我都找不到足够优雅的方式来做..: 以下无效:
str.split(separator: "-").enumerated().map { (index, element) in
return index > 0 ? element.capitalized : element
}.reduce("", +)
它哭了一大堆东西。我相信有一个足够简单的方法......有人吗?
您可以根据破折号“-”拆分字符串(创建字符串数组)并将其元素与所需大小写组合:
let myString = "this-is-my-id"
let newString = myString.split(separator: "-").reduce("", { [=10=] + .capitalized })
print(newString) // "ThisIsMyId"
如果您通过创建新字符串来解构 String.Subsequence
元素,则您的语法有效:
str.split(separator: "-").enumerated().map { (index, element) in
return index > 0 ? String(element).capitalized : String(element)
}.joined() // better than `reduce`
您的代码几乎是正确的。以下是我发现的最具可读性的实现:
let str: String = "this-is-my-id"
let result = str
.split(separator: "-") // split to components
.map { String([=10=]) } // convert subsequences to String
.enumerated() // get indices
.map { [=10=].offset > 0 ? [=10=].element.capitalized : [=10=].element.lowercased() } // added lowercasing
.joined() // join to one string
print(result)
您可以遍历字符(String
是字符的集合),同时持有一个标志,告诉字符是否在破折号之后,以便将其大写:
let dashCase = "this-is-my-id"
let camelCase = dashCase.reduce(into: ("", false)) {
// mark the dash
guard != "-" else { [=10=].1 = true; return }
[=10=].0 += [=10=].1 ? String().uppercased() : String()
// reset the flag so we don't capitalize the next ones
[=10=].1 = false
}.0
print(camelCase) // thisIsMyId
所有这些答案的组合将导致以下最短方式(我认为 - 只有 2 次交互):
let str: String = "this-is-my-id"
let result = str.split(separator: "-").reduce("") {(acc, name) in
"\(acc)\(acc.count > 0 ? String(name.capitalized) : String(name))"
}
谢谢大家!
Swift 4.1.
更好地实现了@sulthan 的回答extension String {
func camelCased(with separator: Character) -> String {
return self.lowercased()
.split(separator: separator)
.enumerated()
.map { [=10=].offset > 0 ? [=10=].element.capitalized : [=10=].element.lowercased() }
.joined()
}
}