85653


iPad(iPadOS 15.2)の **Swift Plygrounds4** で、以下のコードを実行すると、`Cannot find
‘NSDataAsset’ in scope ` というエラーが発生し、再生することができません。  
(Appモードでプロジェクトを実行しています。)

[code]

    import AVFoundation
       
    // 原因だと思われる箇所
    let sound = try! AVAudioPlayer(data: NSDataAsset(name: "Sound")!.data)
    //
       
    func soundplay() {
      sound.prepareToPlay()
      sound.stop()
      sound.currentTime = 0
      sound.play()
    }
    
    
[/code]

Xcodeではクラッシュは発生しませんでした。  
また、`Sound.mp3 ` は事前に読み込み済みです。


CC BY-SA 4.0
2022-01-12T09:39:41.737
85647
2022-01-12T11:34:58.253
2022-01-12T11:06:11.310
50850
50850
question
swift
Swift PlaygroundsでNSDataAssetを使用するとエラーが発生する


_Appモードでプロジェクトを実行しています。_ と言うのがどう言う意味なのかがはっきりしないのですが、`Cannot find ‘NSDataAsset’
in scope`と言うエラーが出るのは、「Swiftコンパイラ的には`NSDataAsset`なんてわかりません」と言われてしまっているのです。

これは実行時エラーではなく、ビルド時のエラーです。

`NSDataAsset`を使いたいのであれば、きちんとドキュメントを参照して見てください。

[NSDataAsset](https://developer.apple.com/documentation/uikit/nsdataasset)

> ##### Frameworks
>
> UIKit  
>  AppKit

ドキュメントの`Frameworks`のところにUIKitとAppKitが書いてありますから、このクラスは`UIKit`か`AppKit`かのどちらかに定義されていると言うことです。

適切な`import`を追加して見てください。

[code]

    import AVFoundation
    import UIKit //<-
    
    //...
    
[/code]

(これで`Cannot find ‘NSDataAsset’ in
scope`のエラーは出なくなるはずですが、あなたのコードがそれで期待通りに動くかどうかはその他の条件によります。)

* * *

なお、「Xcodeではクラッシュは発生しませんでした。」とありますが、Swift Playgroundsでもビルド時エラーになるだけで _クラッシュ_
は発生しませんし、Xcodeでも`import`が同じなら同様に`Cannot find ‘NSDataAsset’ in
scope`のエラーが発生します。

補助的な情報を追記される場合には、より具体的にどんなことをどんな環境で試したのか記載されると、もっと複雑な質問をされる場合でも、誤解の余地が減って適切な回答を得やすくなるだろうと思います。


CC BY-SA 4.0
2022-01-12T11:34:58.253
85653
2022-01-12T11:34:58.253
13972
85647
answer