0

私は、実際には処理する必要がないオプションを処理していますdo, catchが、処理できる可能性があると考えています。

do { run(playSound["correct"]!) } catch {print("Failed to find")}

SpriteKit に慣れていない方のために説明すると、playsound("correct") はサウンドを再生するアクションです。

関数を使用してそれらをたくさん作成し、文字列キーを使用して正しいものを見つける辞書に入れます。

func makePlayable(_ soundFileName: String) -> SKAction {
        let playSoundAction = SKAction.playSoundFileNamed(soundFileName, waitForCompletion: false)
        return playSoundAction
    }

for...ここで、適切なサウンドを再生するアクションのキーとして機能するオーディオのファイル名から取得した文字列を使用して、これらの 100 ほどをディクショナリにパントするループを想像してください。

私が対処したい問題は、辞書を使用してアクションを返し、再生することは、オプションが戻ってくることを意味するということです。

アンラップが必要なもの:

run(playSound["correct"]!)

おそらく私の恐れには根拠がありませんが、再生するサウンド ファイルのアクションの文字列を決定しようとしているシステムで発生する可能性のある障害に対処できるように、何とかこれをもっと優雅に行う必要があるとすぐに思いました... ええ、その文でごめんなさい。

私が最初に選んだのはこれでした:

if let soundAction = playSound["correct"]{
            run(soundAction)
            }
        else{ print("Can't find playable sound Action with this name in \(playSound) dictionary")
            }

これは不必要で長々としたものだと思ったので、私はdo

ただし、質問の上部に記載されている方法で使用すると、catch が呼び出されないことを示す警告が表示されます。

私は何を間違っているのですか、それともdo, catchこれに適していると考えるのは間違っていますか?

4

0 に答える 0