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