Atualizei para o Xcode 11 e o swift 5 e encontrei um problema com as extensões de método quando elas são disponibilizadas por meio de uma estrutura. Mais especificamente, em um projeto estruturado como este:
-> 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)
Tudo compila e executa bem, mas ao executar sessões de depuração no subprojeto, todas as extensões no 'Framework' retornam error: ambiguous use of
quando invocadas a partir da linha de comando lldb. Aqui está um exemplo de código para dar uma idéia:
Crie um projeto de linha de comando para macOs e adicione um novo destino, 'MagicFramework' e em um arquivo Spells.swift (verifique se o arquivo está visível para Main & MagicFramework)
import Foundation
extension String {
public func castSpell() -> String {
return "✨ " + self
}
}
Em seguida, crie um subprojeto 'Assistente' e em um arquivo wizard.swift (visível apenas para o Assistente):
import Foundation
import MagicFramework
public class Tadaa {
public func magic(spell:String) -> String {
return spell.castSpell()
}
}
no arquivo main.swift do Assistente, adicione:
import Foundation
let aa = Tadaa().magic(spell: "this is magic")
print(aa)
Você deve ter a seguinte estrutura:
-> Main project
----> MagicFramework
----> Wizard subproject
então crie e execute o sub 'Assistente', com um ponto de interrupção ativado spell.castSpell()
no Tadaa
. No prompt do lldb, digite:
(lldb)po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
porque?? Este problema não ocorreu com o Xcode 10.
fonte
Eu tive o mesmo problema com minha extensão. Na minha situação, essa é uma função única que estou usando bastante durante a depuração, então acabei de criar uma função global que, no seu caso, aceitaria a string e chamaria essa extensão dentro. Muito parecido com o que @aepryus apontou no comentário para a primeira resposta.
Em seguida, use-o assim:
fonte