Получить реальный тип экземпляра `SBObject` - PullRequest
1 голос
/ 14 апреля 2020

(Этот вопрос помечен c#, потому что я буду делать это с Xamarin, но это скорее вопрос структуры; язык не должен иметь значения.)

Я пытаюсь взаимодействовать с Musi c (ранее iTunes) с использованием Scripting Bridge. Для этого я могу получить SBApplication и спросить его о свойствах; например, playerState даст мне информацию о том, воспроизводится ли он в данный момент, а sources в основном даст мне всю библиотеку в иерархическом порядке.

Но это довольно низкий уровень, поэтому я копался в sdef и sdp для генерации некоторого XML и файла заголовка, чтобы написать несколько подходящих классов-оболочек, соответствующих описанным.

Часть, в которой я застрял, - это в основном наследование. Свойство playlists может содержать различные виды списков воспроизведения (например, MusicPlaylist, MusicFolderPlaylist, et c., Все из которых наследуются от MusicPlaylist), и меня интересуют только экземпляры MusicUserPlaylist.

Но я запутался, как даже спросить экземпляр его типа на всех , гораздо менее эффективно. Я вижу, что debugDescription отвечает на это, например:

<SBObject @0x6000008bf180: <class 'cUsP'> id 28712
of <class 'cSrc'> id 63 of application "Music" (8034)>

И из sdef я вижу, что cUsP - это то, что я ищу:

<class name="user playlist" code="cUsP"
description="custom playlists created by the user"
inherits="playlist" plural="user playlists">
    …
</class>

Но ... я действительно должен разобрать description для этого? Конечно, есть более хороший способ? Я вижу, что конструктор всегда принимает elementCode:

- (instancetype) initWithElementCode:(DescType)code
properties:(nullable NSDictionary<NSString *, id> *)properties data:(nullable id)data;

(на самом деле я не на 100% уверен, что DescType - это то же самое, что, например, class 'cUsP'?)

И, тем не менее, не существует способа получить код этого элемента back ?

TL; DR: учитывая SBElementArray, который может содержать различные подклассы, как Я подтверждаю, что тип динамического c сценария моста экземпляра является определенным классом?

...