Я нашел решение, но понятия не имею, как оно работает. Если бы кто-нибудь мог просветить меня, я был бы очень признателен!
Я создаю две функции в ApplescriptObj C, одну для получения списка воспроизведения, другую для установки списка воспроизведения. В файле моста я установил переменную { get set }
, а затем перечислил функцию для установки списка воспроизведения. В моем контроллере представления (где я делаю изменения) я создаю переменную obj c dynamici c, которая имеет get / set. Затем я могу изменить эту переменную, и она вызовет функцию AppleScript, чтобы изменить мой список воспроизведения ... Код такой:
Файл приложения:
script iTunesBridge
property parent : class "NSObject"
to playlist()
tell application "Music"
return name of current playlist
end tell
end playlist
to setPlaylist:plist -- (NString) -> ()
tell application "Music"
play playlist (plist as string)
reveal current track
end tell
end setPlaylist:
end script
Файл Bridge Swift:
import Cocoa
@objc(NSObject) protocol iTunesBridge {
var playlist: NSString { get set }
func setPlaylist(plist: NSString)
}
ViewController:
class MainController: NSViewController {
@objc dynamic var currentPlaylist: NSString! {
get { return self.iTunesBridge.playlist }
set(value) { self.iTunesBridge.playlist = value }
}
}
Как я уже сказал, я мало представляю, как и почему это работает, и буду очень признателен за ответ. Например, даже если ни в какой момент в swift я не включаю ie var playlist в функцию setPlaylist, он знает, как их соединить. Набор должен быть волшебный c слово ...