Das folgende Code-Snippet wird aus der official document kopiert, wo es verwendet wird, um zu demonstrieren, wie die Extensions verwendet werden, um Methoden zu vorhandenen Typen hinzuzufügen.Vom Beispielcode verwirrt, der den Typen neue Instanzmethoden hinzufügt
extension Int {
func repetitions(task:() -> Void) {
for _ in 0..<self {
task()//what's going on here?
}
}
}
3.repetitions { //why I don't have to call as `repetitions()`
print("Hello!")
}
Frage: Die Frage stellt sich nicht, wie die extinsion extens. Ich bin nur ein wenig verwirrt über diesen Code, warum sieht das so aus? warum verwenden Sie task()
innerhalb des Funktionskörpers? Woher kommt es? für die Linie 3.repetition
warum schreiben sie nicht als 3.repetition()
Vielen Dank
'task' ist der Name eine Funktion. 'task()' ruft diese Funktion auf. – matt
@matt Q1: du meinst die Funktion wie "print (" hallo! ")"? Q2: Hat es etwas mit der 'task' zu tun (Aufgabe: () -> Void) Vielen Dank – SLN
Es ist diese 'Aufgabe'. Der in diese Funktion übergebene Parameter ist eine Funktion. Wir dürfen unserem Parameter einen beliebigen Namen geben, den wir wollen. Wir nennen ihn 'Aufgabe'. – matt