Как создать swift класс для категории?
Я хочу создать Категорию моего существующего класса swift, но в IDE нет возможности сделать это.
любая идея, если категория существует в проекте swift? Или как добиться подобной функциональности в проекте swift?
4 ответа:
в Swift, вы можете использовать
Extensions
для добавления новых функциональных возможностей к существующим классам, структурам и типам перечислений.они отличаются от категорий Objective-C несколькими способами, в основном:
- они не называют
- вам не нужно импортировать расширение явно. Если вы определяете расширение для добавления новых функциональных возможностей к существующему типу, новые функциональные возможности будут доступны на всех существующих экземплярах этого типа, даже если они были созданы до расширение было определено.
- как указано выше, они работают не только с классами, но и с другими типами.
как он стоит сегодня, расширения могут:
- добавить вычисленные свойства и вычисленные статические свойства
- определить методы экземпляра и методы типа
- предоставить новые инициализаторы
- определить индексы
- определение и использование новых вложенных типов
- существующий тип соответствует протокол
основной синтаксис для объявления расширения выглядит следующим образом:
extension SomeType { // new functionality to add to SomeType goes here }
Регистрация документация Apple для получения дополнительной информации о том, как использовать расширения в Swift.
в Objective C они назывались категории, но в Swift они называются расширения. Цель обоих из них-дать дополнительную функциональность существующим классам без необходимости создавать подклассы.
Я читал о расширениях в документации, но я действительно не понимал, как использовать его в своем проекте, пока не посмотрел это учебное видео ( версия YouTube,github источник).
вот резюме, взятое из видео о том, как это сделать.
добавьте файл Swift в свой проект
щелкните правой кнопкой мыши в навигаторе проекта и выберите "новый файл..."
Выберите "Swift File"
соглашение заключается в сохранении имени файла в качестве имени класса, которое вы расширяете плюс (со знаком"+"), что вы делаете с ним. Например, "UIImage+Обрезка".
напишите код для расширения
откройте новый файл Swift, который вы только что создали.
импорт
UIKit
(вместоFoundation
) Если вы протянулиUIView
. Тогда используйтеextension
ключевое слово перед именем класса, который вы хотите продлить. Затем вы можете добавить свои собственные новые методы в класс. (Обратите внимание, что расширения предназначены для добавления новых методов, а не для переопределения существующих методов-следовательно имя.)в видео, например, чтобы добавить метод, который обрезает круг из изображения и дает ему границу.
import UIKit extension UIImage { func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage { // code to create the cropped circle with colored border return newImage } }
посмотреть здесь для полного примера.
используйте расширение в любом месте вашего проекта
теперь вы можете использовать свой новый метод для этого класса в любом месте вашего кода, так же, как это было частью стандартного класса.
вот пример видео ( on 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) } }
метод
cropToCircleWithBorderColor
не является стандартной частьюUIImage
, но, как вы можете видеть, он используется так же, как это было.для дальнейшего исследования:
в Swift это называется расширения ! зацените