以我的拙见,这只能是一个错误。
如果我设置了您在问题中给出的示例,我可以重现该问题。
在断点上,我得到
(lldb) po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
^
正如你所描述的。
但是,如果我查找该函数castSpell
在 lldb 中,我得到:
(lldb) image lookup -vn castSpell
1 match found in /Users/lameyl01/Library/Developer/Xcode/DerivedData/Main-dsjbnoyousgzmrdnqxtxoeyeyzpv/Build/Products/Debug/MagicFramework.framework/Versions/A/MagicFramework:
Address: MagicFramework[0x0000000000000ab0] (MagicFramework.__TEXT.__text + 0)
Summary: MagicFramework`(extension in MagicFramework):Swift.String.castSpell() -> Swift.String at Spells.swift:12
Module: file = "/Users/lameyl01/Library/Developer/Xcode/DerivedData/Main-dsjbnoyousgzmrdnqxtxoeyeyzpv/Build/Products/Debug/MagicFramework.framework/Versions/A/MagicFramework", arch = "x86_64"
CompileUnit: id = {0x00000000}, file = "/Users/lameyl01/tmp/Main/MagicFramework/Spells.swift", language = "swift"
Function: id = {0x100000038}, name = "(extension in MagicFramework):Swift.String.castSpell() -> Swift.String", mangled = "$sSS14MagicFrameworkE9castSpellSSyF", range = [0x000000010033fab0-0x000000010033fb21)
FuncType: id = {0x100000038}, byte-size = 8, decl = Spells.swift:12, compiler_type = "() -> ()"
Blocks: id = {0x100000038}, range = [0x10033fab0-0x10033fb21)
LineEntry: [0x000000010033fab0-0x000000010033fabf): /Users/lameyl01/tmp/Main/MagicFramework/Spells.swift:12
Symbol: id = {0x00000005}, range = [0x000000010033fab0-0x000000010033fb21), name="(extension in MagicFramework):Swift.String.castSpell() -> Swift.String", mangled="$sSS14MagicFrameworkE9castSpellSSyF"
Variable: id = {0x100000055}, name = "self", type = "Swift.String", location = DW_OP_fbreg(-16), decl = Spells.swift:12
这意味着 lldb 恰好找到了一个匹配项:MagicFramework
图书馆。因此,这没有理由含糊不清。
为了完整起见,我还检查了变量的类型spell
正如 llbd 所见:
(lldb) frame variable spell
(String) spell = "this is magic"
总结一下:
LLDBknows类型是字符串。它knows有一个函数castSpell
在扩展中定义,并且它确切地知道所述函数的一种实现。但它仍然显示错误消息。
因此,除非我在这里遗漏了一些重要的东西,否则这一定是一个 lldb 错误。