Я хочу створити категорію мого існуючого швидкого класу, але в IDE немає можливості зробити це.
Будь-яка ідея, чи існує категорія у швидкому проекті? Або як досягти подібної функціональності в швидкому проекті?
Відповіді:
У Swift ви можете використовувати Extensions
для додавання нових функціональних можливостей до існуючих класів, структур та типів перерахування.
Вони відрізняються від категорій Objective-C кількома способами, головним чином:
На сьогоднішній день розширення можуть:
Основний синтаксис для оголошення розширення такий:
extension SomeType {
// new functionality to add to SomeType goes here
}
Перегляньте документацію Apple, щоб отримати додаткову інформацію про те, як використовувати розширення в Swift.
У цілі C їх називали категоріями , а в Swift - розширеннями . Мета обох - надати додаткову функціональність існуючим класам без необхідності створювати підкласи.
Я читав про розширення в документації, але я насправді не розумів, як використовувати їх у своєму проекті, поки не переглянув це навчальне відео ( версія YouTube , джерело github ).
Ось короткий виклад з відео про те, як це зробити.
Клацніть правою кнопкою миші в Навігаторі проектів і виберіть "Новий файл ..."
Виберіть "Швидкий файл"
Домовленість полягає в тому, щоб зберегти ім'я файлу як ім'я класу, який ви розширюєте плюс (зі знаком "+"), що ви з ним робите. Наприклад, "UIImage + Обрізання".
Відкрийте новий щойно створений файл Swift.
Вам слід імпортувати UIKit
(замість Foundation
), якщо ви розширюєте a 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
, але, як бачите, він використовується так само, як і раніше.
Ви можете використовувати наступний код у своєму існуючому класі
extension name{
func funcName(){
}
}
extension
.