Как создать быстрый класс для категории?
Я хочу создать категорию моего существующего класса swift, но в IDE нет возможности для этого.
Любая идея, если категория существует в быстром проекте? Или как добиться аналогичной функциональности в быстром проекте?
Ответы
Ответ 1
В Swift вы можете использовать Extensions
для добавления новых функций к существующим классам, структурам и типам перечисления.
Они отличаются от категорий Objective-C несколькими способами, главным образом:
- Они не называются
- Вам не нужно явно импортировать расширение. Если вы определяете расширение для добавления новых функциональных возможностей к существующему типу, новая функциональность будет доступна во всех существующих экземплярах этого типа, даже если они были созданы до того, как было определено расширение.
- Как указано выше, они работают не только с классами, но и с другими типами.
Как и сегодня, расширения могут:
- Добавить вычисленные свойства и вычисленные статические свойства
- Определить методы экземпляра и методы типа
- Предоставить новые инициализаторы
- Определить индексы
- Определить и использовать новые вложенные типы
- Сделать существующий тип соответствующим протоколу
Основной синтаксис объявления объявления заключается в следующем:
extension SomeType {
// new functionality to add to SomeType goes here
}
Проверьте документацию Apple для получения дополнительной информации о том, как использовать расширения в Swift.
Ответ 2
В Objective C они назывались категории, но в Swift они называются extensions. Цель их обоих - предоставить дополнительные функциональные возможности для существующих классов, не создавая подклассы.
Я читал о расширениях в документации, но я действительно не понимал, как использовать его в своем проекте, пока я не посмотрел этот обучающий видео (версия YouTube, источник github).
Вот резюме, взятое из видео о том, как это сделать.
Добавьте в проект быстрый файл
-
Щелкните правой кнопкой мыши в Навигаторе проектов и выберите "Новый файл..."
-
Выберите "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
, но, как вы можете видеть, он используется так же, как если бы он был.
Для дальнейшего изучения:
Ответ 3
В Swift он называется Расширения!
Проверьте это
Ответ 4
Вы можете использовать следующий код в существующем классе
extension name{
func funcName(){
}
}