Каким образом можно использовать категорию 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. Он уже там.