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?
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.
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.
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".
Abra o novo arquivo Swift que você acabou de criar.
Você deve importar UIKit
(em vez de Foundation
) se estiver estendendo a UIView
. 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.
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 do UIImage
, mas como você pode ver, é usado exatamente como antes.
Você pode usar o seguinte código em sua classe existente
extension name{
func funcName(){
}
}
extension
.