He actualizado a Xcode 11 y swift 5, y he encontrado un problema con las extensiones de método cuando están disponibles a través de un marco. Más específicamente, en un proyecto estructurado así:
-> 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)
Todo se compila y funciona bien, pero cuando se ejecutan sesiones de depuración en el subproyecto, todas las extensiones en 'Framework' regresan error: ambiguous use of
cuando se invocan desde la línea de comando lldb. Aquí hay un ejemplo de código para dar una idea:
Cree un proyecto de línea de comandos de macOs y agregue un nuevo objetivo, 'MagicFramework', y en un archivo Spells.swift (asegúrese de que el archivo sea visible para Main & MagicFramework)
import Foundation
extension String {
public func castSpell() -> String {
return "✨ " + self
}
}
Luego, cree un subproyecto 'Asistente' y en un archivo wizard.swift (visible solo para el Asistente):
import Foundation
import MagicFramework
public class Tadaa {
public func magic(spell:String) -> String {
return spell.castSpell()
}
}
en el archivo main.swift del Asistente, agregue:
import Foundation
let aa = Tadaa().magic(spell: "this is magic")
print(aa)
Debe tener la siguiente estructura:
-> Main project
----> MagicFramework
----> Wizard subproject
luego construya y ejecute el sub 'Asistente', con un punto de interrupción spell.castSpell()
en Tadaa
. En el indicador lldb, escriba:
(lldb)po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
¿¿por qué?? Este problema no ocurrió con Xcode 10.