Qual é a diferença?
task {
// ... //
}
Task {
// ... //
}
Eu descobri isso por acidente.
Task
é a estrutura correta, quando você quer criar uma tarefa assíncrona. Mas escrever task
não causa um erro de sintaxe. Eu conheço o modificador de tarefa SwiftUI. Mas qual é o propósito escrito dentro do código geral?
Isso causa um erro de compilador. Tente escrevê-lo em uma função global.
Então não,
task { }
não pode ser usado em "código geral".Não causa erro do compilador se você usá-lo na declaração de uma
View
estrutura, por exemploNeste caso,
task
está se referindo aotask
modificador. É o mesmo queself.task { }
. Isso cria umView
que é o mesmo queself
, mas com essa tarefa adicionada, mas como isso está emonAppear
, essa visualização é descartada imediatamente e a tarefa não é executada.Se você colocar isso no
body
entanto,então isso causa recursão infinita. Para calcular o
body
deContentView
, precisamos encontrar obody
deself.task { }
. Para fazer isso, precisamos encontrar obody
dotask
modificador. Isso envolve encontrar obody
da visão que ele está modificando, então precisamos encontrar obody
deself
(ContentView
), e isso continua infinitamente até estouro de pilha.Você pode escrever um modificador sem o ponto como parte de outro código, mas não tenho certeza se funcionará muito bem.
Então o que
task
você tem é o mesmo que a versão do modificador e é necessário para retornar umView
significado que você realmente deveria estar usandoTask
se estiver dentro de uma função. Note queAqui está um exemplo bobo com uma função declarada dentro de uma visualização da qual podemos aprender duas coisas: 1) o
task
fechamento nunca é executado, apenas "Hello" é impresso; 2) Podemos adicionar outros modificadores aqui, mas eles também não serão úteis.