Olá Alex, tudo certo?
Você está quase certo! Vou explicar melhor o trecho de código que você escreveu.
Dentro da função, você cria uma variável local chamada resultado, que armazena a soma dos dois números passados como argumentos. Em seguida, você usa a instrução return para retornar o valor de resultado como resultado da função.
Fora da função, você chama a função soma passando os valores 5 e 3 como argumentos. O valor retornado pela função é atribuído à variável resultado que está fora do escopo da função, ou seja, quando a função soma é chamada, ela cria um bloco de código que em curtas palavras, cria suas próprias variáveis que não se relacionam com quem está fora da função, então, quando a função acaba e o valor é retornado, o que resta para o código é uma referência do resultado da função (que é o que você está retornando, o valor 8).
func soma(_ numero1: Int, _ numero2: Int) -> Int{
var resultado = numero1 + numero2
return resultado
// ------> AQUI A VARIÁVEL RESULTADO DEIXA DE "EXISTIR" O QUE RESTA É UMA REFERÊNCIA AO VALOR QUE FOI COMPUTADO<------
}
var resultado = soma(5, 3) // <------ RECEBE ESSA REFERÊNCIA
print(resultado)
Então, o return resultado na função soma não está chamando a variável resultado fora do escopo. Em vez disso, está retornando o valor contido nessa variável como resultado da função.
Qualquer dúvida, estarei à disposição :)