Swift: die Wiederverwendung einer Schließung definition (mit typealias)

Ich versuche zu tun, erstellen eine Schließung Definitionen, die ich bin gonna verwenden eine Menge in meiner iOS-app. So dachte ich, ein typealias wie es schien die vielversprechendste ...

Habe ich einen kleinen Spielplatz Beispiel, das zeigt mein Problem im detail

//Here are two tries for the Closure I need
typealias AnonymousCheck = (Int) -> Bool
typealias NamedCheck = (number: Int) -> Bool

//This works fine
var var1: AnonymousCheck = {
    return $0 > 0
}
var1(-2)
var1(3343)

//This works fine
var var2: NamedCheck = {
    return $0 > 0
}
var2(number: -2)
var2(number: 12)

//But I want to use the typealias mainly as function parameter!
//So:

//Use typealias as function parameter
func NamedFunction(closure: NamedCheck) {
    closure(number: 3)
}
func AnonymousFunction(closure: AnonymousCheck) {
    closure(3)
}

//This works as well
//But why write again the typealias declaration?
AnonymousFunction({(another: Int) -> Bool in return another < 0})
NamedFunction({(another: Int) -> Bool in return another < 0})

//This is what I want... which doesn't work
//ERROR: Use of unresolved identifier 'number'
NamedFunction({NamedCheck in return number < 0})

//Not even these work
//ERROR for both: Anonymous closure arguments cannot be used inside a closure that has exlicit arguments
NamedFunction({NamedCheck in return $0 < 0})
AnonymousFunction({AnonymousCheck in return $0 < 0})

Bin ich etwas fehlt oder es einfach nicht unterstützt Swift?
Dank

EDIT/ERGÄNZUNG:

Das oben ist nur ein einfaches Beispiel. Im realen Leben meine typealias ist komplizierter. So etwas wie:

typealias RealLifeClosure = (number: Int, factor: NSDecimalNumber!, key: String, upperCase: Bool) -> NSAttributedString

Ich im Grunde verwenden möchten typealias als Verknüpfung, so dass ich nicht geben, dass viel. Vielleicht typealias ist nicht die richtige Wahl... gibt es eine andere?

InformationsquelleAutor Soko | 2015-01-06
Schreibe einen Kommentar