Estou tentando criar uma UIViewControllerRepresentable
estrutura, mas o Xcode continua reclamando sobre a implementação de stubs
struct PassVC: UIViewControllerRepresentable {
typealias UIViewControllerType = UIViewController
func makeUIViewController(context: Context) -> UIViewController {
let vc = UIViewController()
vc.view.backgroundColor = .yellow
return vc
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
Adicionei os typealias primeiro, digitei manualmente, deixei o Xcode implementar os stubs, digitei manualmente, mas todas as tentativas terminam com o Xcode reclamando sobre a não implementação dos stubs. Se eu clicar em corrigir, ele reclama sobre a redeclaração dos métodos dos stubs. Alguém enfrentou o mesmo problema no Xcode? Minha versão do Xcode é a 16.0.
Uma solução típica: não use
typealias UIViewControllerType
nadaO Xcode 16 parece tropeçar nisso — basta remover o
typealias
, e em vez disso usar o formato genérico :Se o seu tipo de retorno for concreto (como
MyCustomViewController
), use-o em vez desome UIViewController
. Isso deve deixar o compilador satisfeito.Outra solução: declarar o tipo concreto diretamente (preferido para inferência de tipo)
E não inclua
typealias UIViewControllerType = UIViewController
nada.Embora os protocolos do SwiftUI geralmente digam que você deve incluí-lo, o Xcode 16 atualmente fica confuso quando você o faz.
Você também pode considerar limpar a pasta de compilação e **redefinir os dados derivados:
Se você já tinha o código correto e o Xcode está quebrado:**
Shift + Cmd + K
~/Library/Developer/Xcode/DerivedData/
Às vezes, após alternar entre versões beta ou Swift, o cache de conformidade do protocolo do Xcode fica corrompido.
No final, você terá um código parecido com este:
O problema era que havia uma estrutura personalizada com o nome Context, que entrava em conflito com o tipo Context exigido pelos métodos UIViewControllerRepresentable. Alterar o nome da estrutura resolveu o problema.