首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift:将AVaudioplayer名称作为字符串传递

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

Stack Overflow用户
提问于 2022-05-31 14:12:32
回答 1查看 42关注 0票数 0

斯威夫特相当新,我正试图把我的AVaudioplayer的名字传递给一个函数来播放那个播放器的声音。

代码语言:javascript
运行
复制
 var playname=sender.accessibilityLabel!; (this is the name of the AVaudioplayer)

playbg(bgtrack: sender.accessibilityLabelB!,bgp: playname) -无法将类型“String”的值转换为预期的参数类型“AVAudioPlayer?”

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

播放机功能开始如下:

代码语言:javascript
运行
复制
func playbg(bgtrack:String,bgp: inout AVAudioPlayer?){ 

... }

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

代码语言: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)}

这是我第一次在这里问问题.请善待堆叠溢出;)

EN

回答 1

Stack Overflow用户

发布于 2022-05-31 15:32:40

看起来你一次又一次地为很多事情而挣扎。

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

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

这看起来就像你在尝试对每个声音使用不同的AVAudioPlayer。我不能自称是AVAudioPlayers方面的专家,但我怀疑您应该创建一个,然后将各种声音传递给它,以便在需要时播放。

accessibilityLabel不适合您,程序员,用来识别音频源。它的设计使对象拥有一个对使用您的应用程序的人有意义的名称。你不应该以你似乎想用的方式使用它。

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

我认为您在这里所做的工作就是所谓的the XY problem。也许如果你能给我们更多关于你在JavaScript上做什么的信息,这个社区可以帮助你如何通过使用Swift的Apple来做同样的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72449412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档