Синтаксис для импорта кода Swift в целевом фреймворке:
#import <ProductName/ProductModuleName-Swift.h>
, который в вашем случае, вероятно, будет
#import <Test/Test-Swift.h>
Эта строка, на самом деле, присутствует в вашем примере икомпилятор явно не жалуется на это.См. https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c.
Другая проблема заключается в том, что вы не сможете использовать свой класс Swift так, как пытаетесь, учитывая объявление Swift.Согласно приведенной выше ссылке, декларации Swift должны иметь модификатор доступа public
или open
, чтобы их можно было видеть через заголовок интерфейса -Swift.h
.Вам также нужно сделать функцию addTest()
вызываемой из Objective-C, следовательно, перед ней нужно указать @objc
.Итак, ваш код Swift должен быть изменен следующим образом:
@objc public class MyTest: NSObject {
@objc public func addTest() {
print("test")
}
}
Исходя из той же документации, на которую есть ссылки выше, вы могли бы затруднить доступ к коду Objective-C за пределами среды доступа к addTest()
, опустивpublic
:
@objc func addTest()...
(хотя вам все еще нужно @objc
).
Тогда в вашем классе Objective-C вы можете сделать:
[test performSelector:@selector(addTest)];
Однако любой код вне фреймворка может делать то же самое.
Другое наблюдение заключается в том, что строка кода, которая вызвала ошибку в вашем примере, например #import "Test-Swift.h"
, является способом включения заголовка интерфейса в цель приложения, а не в среду.