Quero criar a categoria da minha classe Swift existente, mas não há opção no IDE para fazer isso.
Alguma ideia se a categoria existe no projeto rápido? Ou como obter funcionalidade semelhante no projeto rápido?
swift
swift-extensions
Khawar
fonte
fonte
extension
.Respostas:
No Swift, você pode usar
Extensions
para adicionar novas funcionalidades às classes, estruturas e tipos de enumeração existentes.Eles diferem das categorias Objective-C em alguns aspectos, principalmente:
Como está hoje, as extensões podem:
A sintaxe básica para declarar uma extensão é a seguinte:
extension SomeType { // new functionality to add to SomeType goes here }
Verifique a documentação da Apple para obter mais informações sobre como usar extensões em Swift.
fonte
Em Objective C, eram chamadas de categorias , mas em Swift são chamadas de extensões . O objetivo de ambos é fornecer funcionalidade adicional às classes existentes sem ter que criar subclasses.
Eu tinha lido sobre extensões na documentação, mas eu realmente não entendia como usar uma em meu projeto até assistir a este vídeo tutorial ( versão do YouTube , fonte do github ).
Aqui está um resumo retirado do vídeo de como fazer isso.
Adicione um arquivo Swift ao seu projeto
Clique com o botão direito no Navegador do Projeto e escolha "Novo Arquivo ..."
Selecione "Arquivo Swift"
A convenção é salvar o nome do arquivo como o nome da classe que você está estendendo mais (com um sinal "+") o que está fazendo com ele. Por exemplo, "UIImage + Cropping".
Escreva o código para a extensão
Abra o novo arquivo Swift que você acabou de criar.
Você deve importar
UIKit
(em vez deFoundation
) se estiver estendendo aUIView
. Então use oextension
palavra chave antes do nome da classe que deseja estender. Você pode então adicionar seus próprios novos métodos à classe. (Observe que as extensões são para adicionar novos métodos, não substituir os métodos existentes - daí o nome.)No vídeo, o exemplo foi adicionar um método que recorta um círculo da imagem e fornece uma borda.
import UIKit extension UIImage { func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage { // code to create the cropped circle with colored border return newImage } }
Veja aqui o exemplo completo.
Use sua extensão em qualquer lugar do seu projeto
Agora você pode usar seu novo método para essa classe em qualquer lugar em seu código, assim como ele fazia parte da classe padrão.
Aqui está o exemplo do vídeo ( no github ):
import UIKit class ViewController: UIViewController { @IBOutlet var imageView : UIImageView = nil override func viewDidLoad() { super.viewDidLoad() let img = imageView.image imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20) } }
O método
cropToCircleWithBorderColor
não é uma parte padrão doUIImage
, mas como você pode ver, é usado exatamente como antes.Para um estudo mais aprofundado:
fonte
Em Swift é chamado de Extensões ! Confira
fonte
extension
s não pode incluir variáveis, que tornam as coisas totalmente diferentes.Você pode usar o seguinte código em sua classe existente
extension name{ func funcName(){ } }
fonte