У меня есть (OS X) Objective-C framework, к которому я хочу добавить некоторые расширения Swift, и я использую Xcode 7ß6 для работы с этим. Существует класс в рамках (давайте назовем это «образец») реализован в файлах «Sample.h» и «Sample.m» .. «Sample.h» содержит:Как расширить класс Objective-C с помощью Swift в рамках?
#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property int x;
@end
.. и «Sample .m»содержит:
#import "Sample.h"
@implementation Sample
- (instancetype) init {
if ((self = [super init]) == nil) return nil;
self.x = 99;
return self;
}
@end
Я добавил„Sample.swift“в рамках содержащего:
import Foundation
extension Sample {
func PrettyPrint() {
print("\(x)")
}
}
Это явно тривиальный вариант того, что я хочу сделать в более широком контексте, здесь Я хочу использовать файл Swift для расширения «Sample» с помощью addin g a Функция «PrettyPrint».
.. framework строит без ошибок, но функция фреймворка «PrettyPrint» не отображается вызывающему приложению. App код вызова в рамки, как:
import Foundation
import TestKit
let sample = Sample()
sample.PrettyPrint()
терпит неудачу на "sample.PrettyPrint()" с: Значение типа 'Образец' не имеет ни одного члена 'PrettyPrint'
Почему это провал? и Можно ли заставить его работать?
Дополнительная информация: Если я удалю файл «Sample.swift» из фреймворка и поместил его в приложение, которое вызывается в фреймворк, класс «Sample» успешно расширен и «sample.PrettyPrint()» работает как ожидается (печать «99»).
@RamsayConsulting если это сработало, тогда вы должны отметить это как ответ – norepro
Это не работает в Swift 3.0 Xcode 8.0 beta –
Это работает, просто убедитесь, что вы создали свой проект, прежде чем пытаться получить доступ к быстрым расширениям в obj c. – Zeezer