Ich versuche, einige der Short-Hand-Syntax von der Kartenfunktion verwendet zu verstehen.Understanding Shorthand Closure-Syntax für Kartenfunktion in Swift
Im Folgenden ist der Aufbau
let array = [1, 2, 3]
// these make sense
let arr1 = array.map({String($0)})
let arr2 = array.map{String($0)}
let arr3 = array.map({ number in
return String(number)
})
let arr4 = array.map({ (number) -> String in
String(number)
})
Hier ist, wo die Verwirrung legt. In swift kann ich auf die geschweiften Klammern für Map verzichten, aber das scheint etwas zu sein, was nicht möglich ist, für meine eigenen Funktionen, wo ich einen Trailing-Closing habe. Eine magische Schlussfolgerung, die vielleicht gemacht wird? Warum wird der String auf diese Weise initialisiert?
// this doesn't make sense. Foregoing the curly braces? I can't do that!!!
let arr5 = array.map(String.init)
let arr6 = array.map(String()) // Compile Error: Cannot convert value of type 'String' to expected argument type '@noescape (Int) throws -> _'
Dieser versucht, mich {}
ähnliche Syntax wie Karte
func crap(block:(Int)-> String) {
print("Int to string block" + block(1));
}
// works obviously
crap{ "\($0) some garbage" }
// compile error : Anonymous closure argument not contained in a closure
crap("\($0) some garbage")
Oh, ich bin ein Dummy. Ich ging einen fehlerhaften Pfad hinunter, der dachte, ich könnte einen Block zu einem Funktionsaufruf hinüberwinden. Okay danke. – Biclops