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.
fuente
Tuve el mismo problema con mi extensión. En mi situación, esa es una función única que estoy usando mucho durante la depuración, por lo que acabo de crear una función global que en su caso simplemente aceptaría la cadena y llamaría a esa extensión dentro. Realmente similar a lo que @aepryus ha señalado en el comentario a la primera respuesta.
Entonces úsalo así:
fuente