質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1360閲覧

濁音を含む名前のファイルを取得する

KotaKawanishi

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/10/16 11:30

Swiftで日本語に関するゲームを作っています。
プロジェクトのAssets.xcassetsの中に「Character_あ」等の名前で置かれている画像ファイルをコード内で取得したいのですが、「Character_ば」「Character_ぱ」等の濁音、半濁音が含まれている画像を取得しようとしてもうまくいきません。

該当するコードは以下の通りです。

```Swift

class CharacterView: UIImageView{

weak var gameViewController:GameViewController! = nil var character: Character! var currentPositionInSquare: Int! = nil var defaultPosition: CGRect! weak var question: Question! init(character: Character, gameViewController:GameViewController, question:Question, frame: CGRect) { super.init(frame: frame) self.character = character self.gameViewController = gameViewController self.isUserInteractionEnabled = true if character == "ゃ"{ let imageString = "Character_や" self.image = UIImage.init(named: imageString) }else if character == "ゅ"{ let imageString = "Character_ゆ" self.image = UIImage.init(named: imageString) }else if character == "ょ"{ let imageString = "Character_よ" self.image = UIImage.init(named: imageString) }else if character == "っ"{ let imageString = "Character_つ" self.image = UIImage.init(named: imageString) }else{ var imageString = "Character_(character)" self.image = UIImage.init(named: imageString) } self.defaultPosition = frame self.question = question }

}

printメソッドでデバッグエリアに表示させてみても「Character_ば」と表示され、濁が分解されてる訳でもなさそうです。 解決方法が分かる方いらっしゃいましたら、教えてください。 よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多分Swift中の文字とBundleの名前がNFCとNFDで異なるんじゃないでしょうか?
Bundleから画像を検索するときはSwiftの外の世界なのでUnicodeの正規化が行われず見つからないんだと思います。

NFCとNFDは同じ表示になることが仕様のため見た目で区別することができません。
ファイル名を日本語にすると忘れたころに問題になるのでお勧めしません。
ファイル名はアルファベットでつけて文字との変換表を持ったほうが良いかと思います。

投稿2017/10/16 12:31

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KotaKawanishi

2017/10/17 02:09

回答ありがとうございます。 「precomposedStringWithCanonicalMapping」メソッドで文字をNFDからNFCに変換してもダメでした。 原因は分からずじまいなのですが、とりあえずSwitch文で濁音、半濁音を識別するようにして解決しました。 ありがとうございました。
fuzzball

2017/10/17 04:29

NFCからNFDに変換しないとダメなのでは? .decomposedStringWithCanonicalMapping でいけると思います。
toki_td

2017/10/17 14:42

HFS+はNFDに変換されるようですが、APFSは自動変換をしないようなんでiOSのバージョンによってファイル名が異なる事態になるかもしれません。 確認できていませんがもしかしたらビルドする環境でも変わるのかもしれませんね. Windowsでファイルを作成して(NFC)それをHigh Sierra(APFS=NFC)にもってってビルドした場合とそれ以外(HFS+=NFD)にもってった場合でファイル名が異なっていて、さらにiOSに展開時に10.3より前(NFD)と以降(そのまま)でも変わる可能性があると、、、 IPAの構造として決まっているかもしれませんが。
KotaKawanishi

2017/10/18 12:20

fuzzballさん 私の勘違いでした。仰る通り「.decomposedStringWithCanonicalMapping」メソッドで大丈夫でした。 おかげでコードが随分スッキリしました。 toki_tdさんも含め解決を手助けしていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問