Después de investigar en diferentes repositorios y sitios webs de internet al terminar descubrimos la resolución que te mostramos ahora.
Solución:
Ambas respuestas fueron correctas pero quiero aclarar un poco más.
_
se utiliza para modificar el comportamiento de los nombres de parámetros externos para los métodos.
En la sección Nombres de parámetros locales y externos para métodos de la documentación, dice:
Swift da el nombre del primer parámetro en un método un nombre de parámetro local por defecto, y proporciona el segundo nombre de parámetro y los subsiguientes nombres de parámetros tanto locales como externos por defecto.
Por otro lado, las funciones por defecto no tienen nombres de parámetros externos.
Por ejemplo, tenemos este foo()
método definido en clase Bar
:
class Bar
func foo(s1: String, s2: String) -> String
return s1 + s2;
Cuando usted llama foo()
se llama como bar.foo("Hello", s2: "World")
.
Peropuede anular este comportamiento utilizando _
en frente de s2
donde se declara.
func foo(s1: String, _ s2: String) -> String
return s1 + s2;
Entonces, cuando llames foo
podría llamarse simplemente como bar.foo("Hello", "World")
sin el nombre del segundo parámetro.
Volviendo a tu caso, runAction
es un método porque está asociado con el tipo SKNode
, obviamente. Así, poniendo un _
antes del parámetro action
te permite llamar runAction
sin un nombre externo.
Actualización para Swift 2.0
La función y el método ahora funcionan. de la misma manera en términos de declaración de nombre de argumento local y externo.
Las funciones ahora se llaman mediante el uso de un nombre de parámetro externo de forma predeterminada, comenzando en el segundo parámetro. Esta regla solo se aplica al código Swift puro.
Entonces, al proporcionar un _
Delante de un funciónla persona que llama no tendrá que especificar el nombre del parámetro externo, al igual que lo haría para un método.
El guión bajo es un token general que se utiliza para indicar un valor descartado.
En este caso específico, significa que la función será invocada como runAction(argument)
en vez de runAction(action:argument)
En otros contextos tiene otro significado similar, por ejemplo en:
for _ in 0..<5 ...
Significa que simplemente queremos ejecutar el bloque 5 veces y no nos importa el índice dentro del bloque.
En este contexto:
let (result, _) = someFunctionThatReturnsATuple()
Significa que no nos importa cuál es el segundo elemento de la tupla, solo el primero.
Desde Swift 3 todas las etiquetas de argumento son requeridas por defecto.
Puede obligar a un IDE a ocultar una etiqueta de argumento con _
.
func foo(a: String)
func foo2(_ a: String)
llamó foo(a: "abc")
y foo2("abc")
Nota: Esto se puede utilizar sólo cuando
a
es el etiqueta de argumento (externa) y nombre de la variable (interna) al mismo tiempo. es equivalente -func foo(a a: String)
no aceptará el_
.
¿Por qué Apple lo está usando?
Puede ver que Apple lo está usando en toda la API. Las bibliotecas de Apple todavía están escritas en Objective-C (si no, comparten los mismos nombres de función de todos modos, que fueron diseñados para la sintaxis de Objective-C)
Funciones como applicationWillResignActive(_ application: UIApplication)
tendría redundante nombre del parámetro application
ya que existe el solicitud en su nombre de función.
tu ejemplo
func runAction(_ action: SKAction!)
sería llamado sin que es _
marcar como runAction(action:)
. El nombre del parámetro action
sería redundante ya que ya hay uno en el nombre de la función. Ese es el propósito y por qué está ahí.
Aquí puedes ver las reseñas y valoraciones de los usuarios
Si te gustó nuestro trabajo, tienes el poder dejar un enunciado acerca de qué le añadirías a esta noticia.