gpt4 book ai didi

ios - Swift Framework 不包含从扩展到通用结构的符号

转载 作者:IT王子 更新时间:2023-10-29 05:17:28 24 4
gpt4 key购买 nike

我无法将我的框架与利用该框架的代码关联起来。具体来说,链接器无法找到泛型结构扩展的符号。

这是 Optional 的扩展之一:

extension Optional {
/// Unwrap the value returning 'defaultValue' if the value is currently nil
func or(defaultValue: T) -> T {
switch(self) {
case .None:
return defaultValue
case .Some(let value):
return value
}
}
}

如果代码是在应用程序的主要部分中编译的,则此方法在 playground 或应用程序中非常有效。但是,当我尝试将其编译成框架时,应用程序(甚至框架的测试)会产生以下链接器错误:

Undefined symbols for architecture i386: "__TFSq2orU__fGSqQ__FQQ", referenced from: __TFC18SwiftPlusPlusTests27Optional_SwiftPlusPlusTests13testOrWithNilfS0_FT_T_ in Optional+SwiftPlusPlusTests.o

类似下面的方法,链接很好(注意,它不是通用的)

extension String {
/// Returns a string by repeating it 'times' times
func repeat(times: Int) -> String {
var result = ""
for i in 0..times {
result += self
}
return result
}
}

我在 github 上的存储库中还有另外两个扩展:SwiftPlusPlus也没有链接(在通用结构上)。如果您提取最新的提交、构建框架,然后尝试运行单元测试,您将重现错误。

到目前为止,我已经尝试在输出的框架和中间文件上运行“字符串”,但我没有看到这些扩展的符号,但我确实看到了 repeat 方法扩展的符号 字符串。所以它甚至似乎没有将它们编译到库中。

有谁知道为什么框架中没有定义这些符号?

编辑

  • Here是我的可选扩展的链接
  • Here是在尝试编译测试目标时导致链接器错误的测试文件的链接

最佳答案

posted on the Apple Developer forums一位 Apple 员工回应说这是一个已知错误。

It looks like the compiler gets the mangled symbol names of methods in generic extensions wrong when they live in a different framework.

关于ios - Swift Framework 不包含从扩展到通用结构的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com