我一直试图在快速代码中使用iTunes.h SBElementArray头中定义的各种ScriptingBridge生成器,例如:
(SBElementArray<iTunesPlaylist *> *) playlists;(SBElementArray<iTunesArtwork *> *) artworks;但是,当我尝试使用与这些数组中包含的类型相关联的方法时:
let playlists: SBElementArray = iTunes.playlists()
if let playlist = playlists[0] as? iTunesPlaylist {
print(playlist.name)
}我得到一个编译错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_iTunesPlaylist", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)这似乎仅限于SBElementArray,因为使用以下内容访问当前轨道名称没有问题:
let track: iTunesTrack = iTunes.currentTrack;
print(track.name)我还猜测这与我试图在代码中从“anyObject”到“iTunesPlaylist”的类型转换有关(我认为我需要bale来访问播放列表内容或我想要显示的任何艺术品),因为以下代码:
let playlists: SBElementArray = iTunes.playlists()
print(playlists[0])
print(type(of: playlists[0]))合情合理地返回:
<ITunesPlaylist @0x6080000402d0: ITunesPlaylist 0 of application "iTunes" (93931)>
ITunesPlaylist发布于 2018-10-08 19:03:13
下传正在尝试创建一个可选的,并初始化一个不允许且不存在于链接器中的iTunesPlaylist。强制它,因为你一直知道它是一个iTunesPlaylist或检查类型。
if playlists.count > 0 {
let playlist : = playlists[0]
if playlist is iTunesPlaylist {
print(playlist.name)
}
}https://stackoverflow.com/questions/42635808
复制相似问题