🙄
[Swift5] FoundationのapplyingTransformでカタカナをひらがなに変換すると長音符号(ー)が勝手に変換される
タイトルの通りです。長音符号がカタカナに混じっていた場合、わざわざ前の音を考慮してひらがなに変えてくれます。お節介ですね。
import Foundation
let text = "あー"
let katakanaText = text.applyingTransform(.hiraganaToKatakana, reverse: false)! // カタカナに変換
print(katakanaText) // "アー"
let hirganaText = katakanaText.applyingTransform(.hiraganaToKatakana, reverse: true)! // ひらがなに変換
print(hirganaText) // "ああ"
ではどうするのがいいかといえば、自前で関数を定義するのが良さそうです。ググると実装がいくつかヒットするのですが、Swift5に対応していないものも多かったので今回は自前で作成しました。
extension StringProtocol {
@inlinable func toKatakana() -> String {
let result = self.unicodeScalars.map { scalar -> UnicodeScalar in
if 0x3041 <= scalar.value && scalar.value <= 0x3096 {
return UnicodeScalar(scalar.value+96)!
} else {
return scalar
}
}
return String(String.UnicodeScalarView(result))
}
@inlinable func toHiragana() -> String {
let result = self.unicodeScalars.map { scalar -> UnicodeScalar in
if 0x30A1 <= scalar.value && scalar.value <= 0x30F6 {
return UnicodeScalar(scalar.value-96)!
} else {
return scalar
}
}
return String(String.UnicodeScalarView(result))
}
}
要らないところで気を利かせて来ないでくれ……という気持ちです。
Discussion