LoginSignup
3
2

More than 5 years have passed since last update.

Swift3でsnake_caseとcamelCaseを変換する

Last updated at Posted at 2017-03-24

必要に迫られて、変換する処理を書いたのでメモ。
何か他に良い方法があれば教えてください。

extension String {

    func snake2camel() -> String {
        return self
            .components(separatedBy: "_")
            .enumerated()
            .map {0 == $0 ? $1 : $1.capitalized}
            .joined()
    }

    func camel2snake() -> String {
        return self.replacingOccurrences(of: "([A-Z])",
                                         with: "_$1",
                                         options: .regularExpression,
                                         range: self.startIndex ..< self.endIndex).lowercased()
    }
}

こんな感じで使えます。

let camel = "snake_case_to_camel_case"
print("\(camel.snake2camel())")         // snakeCaseToCamelCase

let snake = "camelCaseToSnakeCase"
print("\(snake.camel2snake())")         // camel_case_to_snake_case

謝辞

(2017/03/24 17:00 追記)
fuzzballさんがコメントしてくださった内容に更新しました。ありがとうございます!

黒歴史

|ω・)...一応、変更前も晒しておくスタイル

extension String {

    func snake2camel() -> String {
        var ressult = ""

        let items = self.components(separatedBy: "_")

        items.enumerated().forEach {
            ressult += 0 == $0 ? $1 : $1.capitalized
        }

        return ressult
    }

    func camel2snake() -> String {
        return self.replacingOccurrences(of: "([a-z])([A-Z])",
                                         with: "$1_$2",
                                         options: .regularExpression,
                                         range: self.startIndex ..< self.endIndex).lowercased()
    }
}
3
2
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2