Каким образом можно использовать категорию Objective-C в Swift?
Я пытаюсь импортировать некоторые методы категории в мой файл Swift без везения.
КСНЫ-мост-header.h:
#import "UIColor+Hex.h"
UIColor + Hex.h
#import <UIKit/UIKit.h>
@interface UIColor (Hex)
+ (UIColor *)colorWithHex:(NSUInteger)hexInt;
+ (UIColor *)colorWithHexString:(NSString *)hexString;
@end
Я бы ожидал, что автозаполнение покажет UIColor(hexInt: NSUInteger)
и UIColor(hexString: String)
Ответы
Ответ 1
На самом деле ваша категория транслируется в Swift следующим образом:
extension UIColor {
init(hex hexInt: Int) -> UIColor
init(hexString: String) -> UIColor
}
И из-за этого вы должны использовать:
let color = UIColor(hex: 0xffffff) // instead of hexInt:
let color = UIColor(hexString: "ffffff")
Автозаполнение может все еще быть неисправным в бета-программном обеспечении.
Ответ 2
Вы можете использовать категории Objective-C непосредственно в Swift. Это становится действительно интересным для некоторых мостовых классов, таких как String. Расширьте NSString с категорией в Objective-C, а затем вы можете получить к ней доступ из Swift (прямо на String!)
Способ сделать это - создать "соединительный заголовок" в вашем проекте Swift.
Полные инструкции здесь.
Короче:
- Создайте заголовочный файл .h(в Objective-C) со всеми другими
#import
операторами
- Поместите путь к этому файлу в
Objective-C Bridging Header
в настройках сборки
- Не нужно импортировать заголовок моста в ваш файл Swift. Он уже там.