Swift no es como lenguajes como JavaScript, donde puede llamar a una función sin pasar los parámetros y aún se llamará. Entonces, para llamar a una función en Swift, debe asignar un valor a sus parámetros.
Los valores predeterminados para los parámetros le permiten asignar un valor sin especificarlo al llamar a la función. Es por eso que test()funciona cuando especifica un valor predeterminado en la declaración de prueba.
Si no se incluye ese valor por defecto, es necesario proporcionar el valor de la llamada: test(nil).
Además, y no está directamente relacionado con esta pregunta, pero probablemente valga la pena señalarlo, está utilizando la forma "C ++" de tratar con punteros posiblemente nulos, para tratar con posibles opcionales nulos en Swift. El siguiente código es más seguro (especialmente en software de subprocesos múltiples) y le permite evitar el desenvolvimiento forzado del opcional:
func test(firstThing: Int? = nil) {
if let firstThing = firstThing {
print(firstThing)
}
print("done")
}
test()
func test(firstThing: Int = 4): un noOptionalparámetro con un valor predeterminado. ElOptionaltipo (que es lo que?en un nombre de tipo se expande) es un tipo de valor; "parámetro opcional" es un nombre desafortunado para un parámetro que puede estar presente o no en una llamada de función, independientemente de su tipo.