2016-01-22 5 views
1

Я сделал немного Swift и довольно много Objective-C на iOS, но в основном нет реального программирования OS X, поэтому я не использовал NSSound. Я пытался помочь кому-то на форуме Swift, и ... он не работает. Я не знаю, почему.Swift NSSound играет тихо?

В детской площадке, Swift РЕПЛ или даже сценарий (#!/usr/bin/env swift), я могу создать экземпляр NSSound успешно:

NSSound(named:"Hero") 

В REPL/Playground или печать из сценария, я могу видеть, что необязательно имеет NSSound внутри.

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

Почему: Но когда я называю play(), я ничего не слышал?

Это очень маленький кусок кода, он кажется довольно простым, но, очевидно, я чего-то не хватает. Это неважно, потому что это не тот код, который мне нужен, но он прослушивает меня, потому что он кажется таким простым, и все же он не работает.

+1

Почему вы не тестируете свой звук в реальном проекте? Игровая площадка не предназначена для тестирования пользовательского интерфейса. Ваш код должен работать, но вы должны использовать его следующим образом: «NSSound (named:« Hero ») ?. play()', поэтому вы не заставляете разворачивать свой звук. –

+0

Да, я подумал об этом - вот почему я попробовал REPL и скрипт тоже. NSSound - это не действительно пользовательский интерфейс, но, возможно, он не работает ни в одной из этих сред? –

ответ

2

NSSound воспроизводит звук асинхронно. По умолчанию игровая площадка выходит сразу после выполнения ее кода, поэтому процесс завершается до того, как звук имеет возможность играть.

Вот быстрый и грязный способ сохранить живую площадку на неопределенное время, чтобы вы могли слышать звуковую игру.

import Cocoa 
import XCPlayground 

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

Ах, отлично - это объяснение кажется более разумным, чем «не работает и не жалуется», и, конечно же, я могу услышать NSSound, если я это сделаю. –

1

Кажется, как будто NSSound, будучи классом какао, не работает должным образом в любой из сред я тестируемых:

  • площадка
  • Swift Script
  • Swift РЕПЛ

Если я поместил тот же крошечный фрагмент кода в приложение OS X скелета, отлично работает.

Благодаря @Leo за то, что он нажал на меня, чтобы попробовать. Я подумал о возможности, но не пробовал, пока не предложил.

Смежные вопросы