Как создать 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, но, как вы можете видеть, он используется так же, как и раньше.

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

В Swift это называется Extensions! Проверьте это

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

extension name{
func funcName(){
   } 
}
Другие вопросы по тегам