Używam opcjonalnych zamknięć, ale nie mogę znaleźć sposobu na przekazanie parametru. Przeszukuje się wszędzie, wypróbował wszystkie sugestie, ale nie może go uruchomić.Parametry z opcjonalnymi zamknięciami w Swift
Mój kod:
func DoAlert(title: String
, message: String
, actions: String
, sender: AnyObject?
, Ctlr : UIViewController
, SegueString: String?
, YesClosure:()->() = {}
, NoClosure:()->() = {}
, StartClosure:()->() = {}
, EndClosure:()->() = {}
) {
if (actions.rangeOfString("Ok") != nil {
alert.addAction(UIAlertAction(title: "OK", style: .Default) { action -> Void in
EndClosure()
})}
} // end function
chcę dodać zamknięcie do Ok, gdzie potrzebna jest parametr „ja”.
Coś jak poniżej:
// add to func doAlert:
, OkClosure: (AnyObject)->() = {}
// add to action Ok (before the EndClosure:
OkClosure(sender!)
Uzyskiwanie błąd na pierwszej linii: AnyObject nie jest podtypem()
Gdybym opuścić AnyObject z pierwszej linii, Uzyskiwanie błąd: nie można przekształcić wyrażenie na wpisz "AnyObject", aby wpisać "() =>()"
Wszystkie inne próby dają mi podobne błędy "Tuple". Jak kodować przekazywanie parametrów w opcjonalnych zamknięciach w moim kodzie?
Trochę ładniej: "YesClosure: (() ->())? = nil', a następnie użyj go w ten sposób: 'YesClosure?()' (działa tylko wtedy, gdy jest ustawiony). Użyj także lowerCaseCamelCasing dla parametrów, zmiennych i instancji. – vrwim
'DoAlert' * może * mieć zbyt wiele argumentów. Nie ma możliwości napisania czystego kodu, gdy masz metodę, która przyjmuje 10 argumentów, co pogorszyło się przez fakt, że cztery z nich są zamknięciami. – nhgrif
nhgrif. Widzę twój widok. DoAlert jednak tworzy czysty kod wszędzie tam, gdzie chcę symulować "skrzynkę wiadomości" VB. – ReneMusters