ios - 如何将按钮标题传递给多媒体文件名 Swift?

标签 ios swift

我正在尝试将按钮标签传递给我的多媒体文件名。
不幸的是,它不起作用。

想法是当我按下名为“cat”的按钮时,它将播放名为“cat”、“mp3”的文件名
如果我按下标签为“cow”的按钮,它将播放文件名为“cow”的声音。

所以我已经尝试了不同的变体,但我无法让它工作。如果大家有什么想法,请帮忙。

import UIKit
import AVFoundation

class ViewController: UIViewController {
    var audioPlayer: AVAudioPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func playAudio() {
        do {
            self.audioPlayer =  try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("buttonName", ofType: "mp3")!))
            self.audioPlayer.play()

        } catch {
            print("Error")
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func playSound(sender: AnyObject) {
        let  buttonName = sender.currentTitle!
        playAudio()
    }
}

最佳答案

我不是 Swift 方面的专家,但我认为 dope LLVM 无法为您解决这些问题:

  • 你初始化了buttonName作为局部变量,您没有将其传递给 playAudio() (无论如何它不接受参数),它 100% 对我不起作用。
  • 由于您没有通过本地buttonNameplayAudio()作为参数,您无法在函数范围内获取按钮名称。此外,您使用 "buttonName" ,这是一个 String对象,甚至不是变量。没有名为 buttonName.mp3 的文件在你的包中,所以什么都不会发生(总是 print("Error") )。

  • 像这样的东西应该可以工作:(未经测试,但应该更相似)
    import UIKit
    import AVFoundation
    
    class ViewController: UIViewController {
        var audioPlayer: AVAudioPlayer!
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        func playAudio(buttonName: String!) {
            do {
                self.audioPlayer =  try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(buttonName, ofType: "mp3")!))
                self.audioPlayer.play()
    
            } catch {
                print("Error")
            }
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        @IBAction func playSound(sender: AnyObject) {
            let  buttonName = sender.currentTitle!
            playAudio(buttonName)
        }
    }
    

    关于ios - 如何将按钮标题传递给多媒体文件名 Swift?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35875854/

    相关文章:

    ios - 无法使用 FMDB 包装器插入 SQLITE 数据库

    iphone - 无法测试从 iTunes 商店购买,出现两个看似冲突的错误

    ios - 如何在 iOS/Swift 中存储一组更新的问题和答案并将其持久化

    ios - 我的代码不适用于TableView中的部分

    ios - Swift:如何在 iOS 中创建弹出菜单

    html - iOS 在多列中将 HTML 绘制为 PDF

    iphone - iOS 7 UItableview 单元格背景 View

    iphone - avplayer内存泄漏

    swift - 如何在歌曲重复时无滞后/延迟地循环背景音乐(无缝)

    arrays - 如何从 Swift 3 中的结构数组生成 JSON?