Como você deve lidar com argumentos de fechamento para UIAlertAction
Eu tenho tentado criar umUIAlertAtion
que também possui um manipulador. Eu li as respostas deesta questionar e saber como fazê-lo.
Minha pergunta é apenas sobre a parte do fechamento.
1) Eu sei que posso escrever:{alert in println("Foo")}
Ou{_ in println("Foo")}
mas eunão pode Escreva{println("Foo")}
. Nos comentáriosaqui é explicado porquevocê precisa lidar com a ação do argumento.
Isso significa que, como o manipulador é do tipo(UIAlertAction) -> Void)?
Devo sempre capturar o alertAction passado?
2) Eu também liesta e a resposta está basicamente dizendo que você pode passar uma função como argumento, mas a função deve ter algo do tipoUIAlertAction -> Void
, que eu escrevi:
private func anything(action : UIAlertAction) {
print("hello")
}
e depois escrevi minha ação de alerta como tal:
let anotherAction = UIAlertAction(title: "hi", style: UIAlertActionStyle.Default,
handler: anything(action)) // error: Use of unresolved identifier 'action'
confuso por que eu recebo esse erro
3) Nos comentários, também dizia:Mas, além disso, você não precisa escrever UIAlertActionStyle.Default rapidamente. O padrão também funciona
Eu tentei escrever não usando o estilo, então ele teria como padrão.Default
let sendLogAction = UIAlertAction(title: "Log") { action in print("goodbye")}
Mas então eu recebo o seguinte erro:
'(title: String, (_) -> ())' (aka '(title: String, _ -> ())') não é convertível em '(title: String ?, style: UIAlertActionStyle, manipulador: (( UIAlertAction) -> Void)?) '(Aka' (título: Opcional, estilo: UIAlertActionStyle, manipulador: Opcional ()>) '), as tuplas têm um número diferente de elementos
4) Também lendoesta responda. Eu não entendo por que precisamos passaralert
Isso não faz sentido. Não é como se não soubéssemos qual é o tipo de alerta ... já não definimos seu tipo? !! Alguém pode explicar onde a aprovação da ação em si seria útil em geral, quero dizer o que poderíamos fazer com ela?
Eu sei que isso é escrito como 4 perguntas, mas acho que é realmente apenas uma questão fundamental. Eu tenho extensivamenteler, usou manipuladores de fechamento / conclusão em um projeto em que estou trabalhando e brincando no playground, mas ainda estou confuso.