SDKs precisam suportar tanto SwiftUI quanto UIKit. O desafio é expor APIs que funcionem naturalmente em ambos os paradigmas — delegates para UIKit, async/await + ObservableObject para SwiftUI.

Property Wrappers de Estado

Property WrapperOwnershipTipoUso
@StateView possui o dadoValue types (String, Int, Bool)Estado local da view (toggle, texto input)
@StateObjectView possui o objetoObservableObject (class)ViewModel criado pela view
@ObservedObjectView observa, não possuiObservableObject (class)ViewModel passado como parâmetro
@PublishedPropriedade do ObservableObjectQualquer tipoNotifica views quando valor muda
@EnvironmentObjectInjetado na hierarquiaObservableObject (class)Dependências compartilhadas (SDK instance)
@BindingReferência a @State de outra viewValue typesTwo-way binding entre parent e child

Fluxo de Dados

DireçãoMecanismoExemplo
Parent para ChildInit parameter / @BindingChildView(title: title)
Child para Parent@Binding / ClosureChildView(onComplete: { result in ... })
Shared State@EnvironmentObject.environmentObject(sdk)
Async State@StateObject + @PublishedViewModel com estados Loading/Success/Error
Qual a diferença entre @StateObject e @ObservedObject?
@StateObject cria e possui o objeto — SwiftUI garante que a instância sobrevive a re-renders da view. Use quando a view é responsável por criar o ViewModel.
@ObservedObject apenas observa um objeto que vem de fora. Se a parent view re-renderiza, o objeto pode ser recriado (perdendo estado). Use quando o ViewModel é passado como parâmetro. Regra: quem cria usa @StateObject, quem recebe usa @ObservedObject.