斯威夫特相当新,我正试图把我的AVaudioplayer的名字传递给一个函数来播放那个播放器的声音。
var playname=sender.accessibilityLabel!; (this is the name of the AVaudioplayer)playbg(bgtrack: sender.accessibilityLabelB!,bgp: playname) -无法将类型“String”的值转换为预期的参数类型“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)}这是我第一次在这里问问题.请善待堆叠溢出;)
发布于 2022-05-31 15:32:40
看起来你一次又一次地为很多事情而挣扎。
让我们从一些高级编程知识开始。编写代码的人的主要工作之一是创建问题的模型。在这种情况下,您试图建模的问题似乎与播放大量声音有关。JavaScript人员提出的模型似乎涉及某种字符串,可以让您识别想要播放的声音(可能吗?)这里没有足够的细节)。
创建Swift模型的人可能是不同的。看起来,即使您已经切换了语言和操作环境,您仍然在尝试使用JavaScript的模型。
这看起来就像你在尝试对每个声音使用不同的AVAudioPlayer。我不能自称是AVAudioPlayers方面的专家,但我怀疑您应该创建一个,然后将各种声音传递给它,以便在需要时播放。
accessibilityLabel不适合您,程序员,用来识别音频源。它的设计使对象拥有一个对使用您的应用程序的人有意义的名称。你不应该以你似乎想用的方式使用它。
最后,您的长链if语句也是早期语言程序员遇到的问题。他们创建了一个特殊的语言结构,switch语句来简化逻辑流。
我认为您在这里所做的工作就是所谓的the XY problem。也许如果你能给我们更多关于你在JavaScript上做什么的信息,这个社区可以帮助你如何通过使用Swift的Apple来做同样的事情。
https://stackoverflow.com/questions/72449412
复制相似问题