我已经广泛搜索了这个答案,但没有找到,所以我在这里问。我正在尝试使用Swift阅读iTunes中的当前曲目,但每当我尝试引用任何iTunes类(iTunesApplication,iTunesTrack等)时,我都会收到以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_iTunesApplication", referenced from:
__TFC8WAILT_v213iTunesWrapper17getSongWithFormatfS0_FTSS3sepSS10timeOnLeftSb_SS in iTunesWrapper.o
__TMaCSo17iTunesApplication in iTunesWrapper.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
知道为什么会这样吗?
谢谢,
-tlf
附:如果我使用Obj-C,它可以正常工作。它只在我使用Swift时出错。
答案 0 :(得分:1)
由于Swift强大的静态类型,它存在与代码链接的问题,它没有实现或二进制代码。因此,要使用Objective-C Bridging Header,您很可能需要使用泛型SBObject
,因为Swift知道这些的实现,即使你的.h声明了其他类。
另一种方法是使用脚本生成一个本机Swift文件,其中包含可以查看和使用的声明。 Here是一个Python脚本(完全披露:它是我的),它生成Objective-C Scripting Bridge标头,然后创建一个原生的Swift版本。这避免了链接器错误和前面提到的SBObject泛型类型。