Как создать быстрый класс для категории?

Я хочу создать категорию моего существующего класса 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, но, как вы можете видеть, он используется так же, как если бы он был.

Для дальнейшего изучения:

Ответ 4

Вы можете использовать следующий код в существующем классе

extension name{
func funcName(){
   } 
}