我已经升级到Xcode 11和Swift 5,并遇到一个问题,即在框架中提供方法扩展时会出现问题。更具体地说,在像这样结构化的项目中:
一切编译和运行都很顺利,但在对子工程进行调试会话时,从lldb命令行调用“Framework”中的所有扩展名都返回“error:ambiguous use of”。以下是一个代码示例,以便了解情况:
创建一个macOS命令行项目,并添加一个新目标,“MagicFramework”,并在文件Spells.swift中(确保该文件对“Main”和“MagicFramework”可见)。
在Wizard的main.swift文件中添加:
你应该有以下结构:
-> Main Project
-> Framework created from sources in 'Main Project'
-> Subproject using the above Framework (Sources packaged in the framework are not visible to the sub-project)
一切编译和运行都很顺利,但在对子工程进行调试会话时,从lldb命令行调用“Framework”中的所有扩展名都返回“error:ambiguous use of”。以下是一个代码示例,以便了解情况:
创建一个macOS命令行项目,并添加一个新目标,“MagicFramework”,并在文件Spells.swift中(确保该文件对“Main”和“MagicFramework”可见)。
import Foundation
extension String {
public func castSpell() -> String {
return "✨ " + self
}
}
然后创建一个名为'Wizard'的子项目,并在一个名为wizard.swift的文件中(仅对Wizard可见):
import Foundation
import MagicFramework
public class Tadaa {
public func magic(spell:String) -> String {
return spell.castSpell()
}
}
在Wizard的main.swift文件中添加:
import Foundation
let aa = Tadaa().magic(spell: "this is magic")
print(aa)
你应该有以下结构:
-> Main project
----> MagicFramework
----> Wizard subproject
然后构建并运行"Wizard"子程序,在Tadaa
中的spell.castSpell()
上设置断点。在lldb提示符下,输入:
(lldb)po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
为什么??这个问题在Xcode 10中没有发生过。