我在i os上做了一些快速和大量的objective-c,但是基本上没有真正的os x编程,所以我没有使用NSSound。我想在一个快速论坛上帮助某人,然后…它不起作用。我不知道为什么。
在操场、swift repl甚至脚本(#!/usr/bin/env swift)中,我可以成功地实例化nssound:

NSSound(named:"Hero")

在repl/playground或从脚本打印中,我可以看到可选的内部有一个nssound。但当我打电话给play()时,我什么也没听到:
NSSound(named:"Hero")!.play()

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

最佳答案

nssound异步播放其声音。默认情况下,操场在执行其代码后立即退出,因此该进程在声音有机会播放之前终止。
这里有一个快速和肮脏的方法,让操场无限期地活着,这样你就可以听到声音播放。

import Cocoa
import XCPlayground

if let sound = NSSound(named:"Hero") {
    XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
    sound.play()
}

10-06 05:54