7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひらがな→カタカナ変換(Swift)

Last updated at Posted at 2018-02-08

Swiftでひらがな→カタカナ変換するStringのextensionを実装しました。

環境

  • OS:macOS High Sierra 10.13.1
  • Xcode:9.2 (9C40b)
  • Swift:4.0.3

実装

applyingTransform(_:reverse:) メソッドを使います。

String+Transform.swift
import Foundation

extension String {
    // MARK: Public Methods
    
    // ひらがな→カタカナ
    public func hiraganaToKatakana() -> String {
        return self.transform(transform: .hiraganaToKatakana, reverse: false)
    }
    
    // MARK: Private Methods
    
    private func transform(transform: StringTransform, reverse: Bool) -> String {
        if let string = self.applyingTransform(transform, reverse: reverse) {
            return string
        } else {
            return ""
        }
    }
}

続いてテストコードです。

StringTransformTests.swift
import XCTest

class StringTransformTests: XCTestCase {
    // MARK: Test Methods
    
    // MARK: hiraganaToKatakana
    
    func testHiraganaToKatakanaAll() {
        checkHiraganaToKatakana(
            before: "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゐゆゑよわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゔぁぃぅぇぉっゃゅょゎ",
            after: "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤヰユヱヨワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴァィゥェォッャュョヮ"
        )
    }

    func testHiraganaToKatakanaHalfwidthKatakanaAll() {
        // なぜか半角カナが全角カナに変換される
        checkHiraganaToKatakana(
            before: "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴァィゥェォッャュョ",
            after: "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴァィゥェォッャュョ"
        )
    }
    
    func testHiraganaToKatakanaScramble() {
        checkHiraganaToKatakana(
            before: "testテストてすと検証けんしょう",
            after: "testテストテスト検証ケンショウ"
        )
    }

    // MARK: Private Methods
    
    private func checkHiraganaToKatakana(before: String, after: String) {
        XCTAssertEqual(before.hiraganaToKatakana(), after)
    }
}

備考

reversetrue を渡すと、カタカナ→ひらがな変換になります。

transform の値を変えると、他にも様々な変換ができます。
たとえば .fullwidthToHalfwidth を渡すと全角→半角変換になります。

参考リンク

7
7
0

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
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?