我试图将sdef
和sdp
生成的Scripting Bridge标头转换为Swift,以便能够在没有桥接头和obj-c包装器的情况下使用它。我认为我在SwiftingBridge的帮助下非常接近,但我仍然面临属性问题或返回类型SBElementArray<iTunesAirPlayDevice>
和NSArray<iTunesAirPlayDevice>
的问题。如果我让他们这样,我就会遇到问题Cannot specialize non-generic type 'SBElementArray'
等等。
我可以将目标C代码的那部分转换为Swift吗?
示例目标C代码:
// The application program
@interface iTunesApplication : SBApplication
- (SBElementArray<iTunesAirPlayDevice *> *) AirPlayDevices;
- (SBElementArray<iTunesBrowserWindow *> *) browserWindows;
- (SBElementArray<iTunesEncoder *> *) encoders;
- (SBElementArray<iTunesEQPreset *> *) EQPresets;
- (SBElementArray<iTunesEQWindow *> *) EQWindows;
- (SBElementArray<iTunesPlaylistWindow *> *) playlistWindows;
- (SBElementArray<iTunesSource *> *) sources;
- (SBElementArray<iTunesVisual *> *) visuals;
- (SBElementArray<iTunesWindow *> *) windows;
// ...
@property (copy) NSArray<iTunesAirPlayDevice *> *currentAirPlayDevices; // the currently selected AirPlay device(s)
// ...
答案 0 :(得分:1)
我只需更改代码以返回本机数组对象即可使其工作:
@objc protocol iTunesApplication {
//...
optional func AirPlayDevices() -> [iTunesAirPlayDevice]
optional func browserWindows() -> [iTunesBrowserWindow]
optional func encoders() -> [iTunesEncoder]
optional func EQPresets() -> [iTunesEQPreset]
optional func EQWindows() -> [iTunesEQWindow]
optional func playlistWindows() -> [iTunesPlaylistWindow]
optional func sources() -> [iTunesSource]
optional func visuals() -> [iTunesVisual]
optional func windows() -> [iTunesWindow]
optional var AirPlayEnabled: Bool {get}
//...
}