1

我在 iOS 上做了一些 Swift 和相当多的 Objective-C,但基本上没有真正的 OS X 编程,所以我没有使用NSSound. 我试图在 Swift 论坛上帮助某人,但......它不起作用。我不确定为什么。

在 Playground、Swift REPL 甚至脚本 ( #!/usr/bin/env swift) 中,我可以成功实例化一个 NSSound:

NSSound(named:"Hero")

在 REPL / Playground 或从脚本打印中,我可以看到可选的内部有一个 NSSound。但是当我打电话时play(),我什么也没听到:

NSSound(named:"Hero")!.play()

为什么?

这是一小段代码,看起来很简单,但显然我错过了一些东西。这没什么大不了的,因为它不是我需要的代码,但它困扰着我,因为它看起来很简单,但它不起作用。

4

2 回答 2

2

NSSound 异步播放它的声音。默认情况下,游乐场在执行其代码后立即退出,因此该进程在声音有机会播放之前终止。

这是让操场无限期保持活力的快速而肮脏的方法,以便您可以听到声音播放。

import Cocoa
import XCPlayground

if let sound = NSSound(named:"Hero") {
    XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
    sound.play()
}
于 2016-01-22T04:43:26.283 回答
1

似乎 NSSound 作为一个可可类,在我测试过的任何环境中都不能正常工作:

  • 操场
  • 迅捷脚本
  • 斯威夫特 REPL

如果我把同样的一小段代码放在一个骨架 OS X 应用程序中,效果很好。

感谢@Leo 推动我实际尝试。我考虑过这种可能性,但在他建议之前没有尝试过。

于 2016-01-22T02:50:26.390 回答