Я хочу создать категорию своего существующего быстрого класса, но в IDE нет возможности сделать это.
Есть идеи, существует ли категория в быстром проекте? Или как добиться аналогичной функциональности в быстром проекте?
swift
swift-extensions
Khawar
источник
источник
extension
.Ответы:
В 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 + Cropping».
Напишите код для расширения
Откройте только что созданный новый файл 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 } }
См. Здесь полный пример.
Используйте свое расширение в любом месте вашего проекта
Теперь вы можете использовать свой новый метод для этого класса в любом месте вашего кода, как если бы он был частью стандартного класса.
Вот пример видео ( на 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 это называется Extensions ! Проверить это
источник
extension
s не может включать переменные, которые меняют ситуацию.Вы можете использовать следующий код в своем существующем классе
extension name{ func funcName(){ } }
источник