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