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