Como se faz para fazer um delegado, ou seja NSUserNotificationCenterDelegate
, rapidamente?
delegates
swift
delegation
user3718173
fonte
fonte
Respostas:
Não é tão diferente de obj-c. Primeiro, você deve especificar o protocolo na sua declaração de classe, como a seguir:
A implementação terá a seguinte aparência:
Claro, você deve definir o delegado. Por exemplo:
fonte
@interface MyCustomClass: UIViewController <ClassIWantToUseDelegate>
, permitindo iniciar / configurar o viewcontroller, assim como chamar métodos delegados nas sub-visualizações? Algo semelhante a isso ?Aqui está uma pequena ajuda para delegados entre dois controladores de exibição:
Etapa 1: faça um protocolo no UIViewController que você removerá / enviará os dados.
Etapa 2: declarar o delegado na classe de envio (ou seja, UIViewcontroller)
Etapa 3: use o delegado em um método de classe para enviar os dados para o método de recebimento, que é qualquer método que adote o protocolo.
Etapa 4: adote o protocolo na classe de recebimento
Etapa 5: implementar o método delegado
Etapa 6: defina o delegado no prepareForSegue:
E isso deve funcionar. Obviamente, isso é apenas fragmentos de código, mas você deve ter uma ideia. Para uma longa explicação desse código, você pode ir até a entrada do meu blog aqui:
segues e delegados
Se você está interessado no que está acontecendo sob o capô com um delegado, escrevi sobre isso aqui:
sob o capô com delegados
fonte
weak
é necessário apenas para classes, não estruturas e enumerações. Se o delegado for uma estrutura ou enum, não será necessário se preocupar com ciclos de retenção. No entanto, o delegado é uma classe (isso ocorre em muitos casos, já que muitas vezes é um ViewController), então você precisa,weak
mas precisa declarar seu protocolo como uma classe. Há mais informações aqui stackoverflow.com/a/34566876/296446Os delegados sempre me confundiram até perceber que um delegado é apenas uma turma que trabalha para outra turma . É como ter alguém lá para fazer todo o trabalho sujo para você que você não quer fazer sozinho.
Eu escrevi uma pequena história para ilustrar isso. Leia-o no Playground, se quiser.
Era uma vez...
Na revisão, há três partes principais para criar e usar o padrão de delegação.
Vida real
Em comparação com a história do Bossy Big Brother acima, os delegados são frequentemente usados para as seguintes aplicações práticas:
A grande parte é que essas classes não precisam saber nada uma sobre a outra, exceto que a classe delegada está em conformidade com o protocolo necessário.
Eu recomendo a leitura dos dois artigos a seguir. Eles me ajudaram a entender os delegados ainda melhor do que a documentação .
Mais uma nota
Os delegados que fazem referência a outras classes que não possuem devem usar a
weak
palavra-chave para evitar ciclos de referência fortes. Veja esta resposta para mais detalhes.fonte
Recebi algumas correções para publicar no @MakeAppPie
Primeiro, quando você estiver criando um protocolo de delegação, ele deve estar em conformidade com o protocolo de classe. Como no exemplo abaixo.
Segundo, seu delegado deve ser fraco para evitar o ciclo de retenção.
Por último, você está seguro porque seu protocolo é um valor opcional. Isso significa que sua mensagem "nula" não será enviada para esta propriedade. É semelhante à declaração condicional com
respondToselector
em objC, mas aqui você tem tudo em uma linha:Acima, você tem um exemplo de obj-C e, abaixo, um exemplo rápido de como ele se parece.
fonte
delegate?.myMethod
não trava porque se delegado fornil
, nada aconteceria. No entanto, se você fez erro e escreveudelegate!.myMethod
você pode falhar se um delegado não está definido, então é basicamente uma forma de você para ser seguro ...Aqui está uma essência que eu montei . Eu estava pensando o mesmo e isso ajudou a melhorar minha compreensão. Abra isso no Xcode Playground para ver o que está acontecendo.
fonte
UIViewController
classe conheça o delegado que fizemos? Eles precisam ser declarados em um arquivo rápido? Qualquer ajuda significará muito.class ViewController : UIViewController NameOfDelegate
.a.swift
acordo com a sua resposta acima, ela não apareceb.swift
. Não consigo alcançar nenhuma classe fora do meu arquivo rápido. algum resistente?DELEGADOS NO SWIFT 2
Estou explicando com o exemplo de Delegado com dois viewControllers. Nesse caso, o SecondVC Object está enviando dados novamente para o primeiro View Controller.
Classe com declaração de protocolo
No primeiro protocolo ViewController, a conformidade é feita aqui:
Definição de método de protocolo no First View Controller (ViewController)
Durante o push, o SecondVC do First View Controller (ViewController)
fonte
Primeira classe:
Segunda classe:
fonte
Type 'ViewController' does not conform to protocol 'NetworkServiceDelegate'
plz sugerido. É minha 6º dia em rápida :)Passo a passo muito fácil (100% funcionando e testado)
Etapa 1: Criar método no primeiro controlador de exibição
Etapa 2: definir delegado enquanto pressiona para o segundo controlador de exibição
step3: defina delegar como
classe ViewController: UIViewController, ProcessStatusDelegate {
etapa 4: criar protocolo
step5: pegue uma variável
passo 6: Volte ao método anterior de delegação de chamada do controlador de exibição, para que o primeiro visualize o controlador notificando com dados
fonte
Exemplo simples:
fonte
Delegados são um padrão de design que permite que um objeto envie mensagens para outro objeto quando um evento específico acontece. Imagine um objeto A chama um objeto B para executar uma ação. Depois que a ação é concluída, o objeto A deve saber que B concluiu a tarefa e tomar as medidas necessárias, isso pode ser alcançado com a ajuda dos delegados! Aqui está um tutorial implementando delegados passo a passo no rápido 3
Link do tutorial
fonte
As soluções acima pareciam um pouco acopladas e, ao mesmo tempo, evitavam reutilizar o mesmo protocolo em outros controladores, é por isso que eu vim com a solução mais forte digitada usando apagamento de tipo genérico.
output : obteve novo valor newValue
fonte
No veloz 4.0
Crie um representante na classe que precise enviar alguns dados ou fornecer alguma funcionalidade para outras classes
Gostar
Depois disso, na classe que vai confirmar para este delegado
fonte