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


Я хочу создать Категорию моего существующего класса swift, но в IDE нет возможности сделать это.

любая идея, если категория существует в проекте swift? Или как добиться подобной функциональности в проекте swift?

4 80

4 ответа:

в 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+Обрезка".

напишите код для расширения

откройте новый файл 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
    }
}

посмотреть здесь для полного примера.

используйте расширение в любом месте вашего проекта

теперь вы можете использовать свой новый метод для этого класса в любом месте вашего кода, так же, как это было частью стандартного класса.

вот пример видео ( on 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 это называется расширения ! зацените

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

extension name{
func funcName(){
   } 
}