Swift:将AVaudioplayer名称作为字符串传递



对于Swift来说是相当新的,我试图将我的AVaudioplayer的名称传递给一个函数来播放该播放器的声音。

var playname=sender.accessibilityLabel!; (this is the name of the AVaudioplayer)

playbg (bgtrack: sender.accessibilityLabelB !, bgp: playname) -不能将"字符串"类型的值转换为预期的参数类型"AVAudioPlayer吗?'

显然,我需要知道如何传递字符串作为播放器的实际名称。

播放器功能开始如下:

func playbg(bgtrack:String,bgp: inout AVAudioPlayer?){ 
... }

下面是我能让它工作的唯一方法,这意味着添加的声音越多,代码就会变得越疯狂。我可以用一行Javascript完成所有这些…

if (playname=="bgcar"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &bgcar)}
if (playname=="bgrain"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &bgrain)}
if (playname=="bgtent"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &bgtent)}
if (playname=="bgtrain"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &bgtrain)}
if (playname=="city"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &city)}
if (playname=="crickets"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &crickets)}
if (playname=="fan"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &fan)}
if (playname=="fire"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &fire)}
if (playname=="hoover"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &hoover)}
if (playname=="plane"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &plane)}
if (playname=="roof"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &roof)}
if (playname=="sea"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &sea)}
if (playname=="storm"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &storm)}
if (playname=="underwater"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &underwater)}
if (playname=="water"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &water)}
if (playname=="wind"){playbg(bgtrack: sender.accessibilityLabel!, bgp: &wind)}

这是我第一次在这里问…>

看起来你在同时处理很多事情。

让我们从一些高级编程知识开始。编写代码的人的主要工作之一是创建问题的模型。在这种情况下,你试图建模的问题似乎与播放一堆声音有关。JavaScript人员提出的模型似乎涉及某种字符串,可以让您识别想要播放的声音(也许?这里没有足够的细节)。

创建Swift模型的人可能不同。看起来你仍然在尝试使用JavaScript的模型,即使你已经切换了语言和操作环境。

就像你试图为每个声音使用不同的AVAudioPlayer一样。我不能声称自己是AVAudioPlayers的专家,但我怀疑你应该创建一个,然后传递各种声音给它,以便在需要时播放。

accessibilityLabel不是为你,程序员,用来识别音频源。它的设计目的是使对象具有对使用您的应用程序的人员有意义的名称。你不应该以你想要的方式使用它。

最后,if语句的长链是程序员在早期语言中遇到的问题。他们创造了一个特殊的语言结构,switch语句来简化逻辑流程。

我认为你在这里工作的是所谓的XY问题。也许如果你给我们更多的信息,关于你在做什么JavaScript和社区可以帮助你如何做同样的事情通过苹果sdk与Swift。

最新更新