Я хочу создать категорию своего существующего быстрого класса, но в 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 ! Проверить это
extension
s не может включать переменные, которые меняют ситуацию.
Вы можете использовать следующий код в своем существующем классе
extension name{
func funcName(){
}
}
extension
.