问题
I am importing swift framework into objective-c project like this:
@import MyFramework;
The problem is that only some of the classes are recognized by the class i am importing the framework.
The class which is recognized:
public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle
{ ... }
The class which is not:
public class VeediUtils
{ ... }
They are both public so why the first is recognized in the workspace and the other not?
Also i see in the header file MyFramework-Swift.h that a class
@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>
Appear while the other dont
Why is that?
Also to point that this same procedure work when i am importing swift framework to swift project
回答1:
To access a swift class in objc, that is not inherited from NSObject you need to:
@objc public class VeediUtils
A Swift class or protocol must be marked with the @objc attribute to be accessible and usable in Objective-C. This attribute tells the compiler that this piece of Swift code can be accessed from Objective-C. If your Swift class is a descendant of an Objective-C class, the compiler automatically adds the @objc attribute for you.
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html
回答2:
If you previously configured Project for integrating with Swift and want to use Swift Dynamic Framework, you have to import it like this way (replace {value} with appropriate names depending on your Project):
#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h>
#import "{YourProjectTargetName}-Swift.h"
EDIT:
If your framework has Defines Module
set to true
, then you can import it like this:
@import MyFramework;
回答3:
You have to add @objc
to the declaration of the VeediUtils
class, or make it inherit from NSObject
. Otherwise it won't be visible to Objective-C.
In your case, RecognizedClass
is recognized because it is a subclass of UIViewController
, which is a subclass of NSObject
.
回答4:
Using Swift Classes in Objective-C
If you are going to import code within an App Target (Mixing Objective-C and Swift in one project) you should use the next import line #import "<#YourProjectName#>-Swift.h"
to expose Swift code to Objective-C code [Mixing Swift and Objective-C code in a project]
In this post I will describe how to import Swift framework to Objective-C code
Objective-C consumer -> Swift dynamic framework
Xcode version 10.2.1
Create a Swift framework
Follow Create Swift framework
Expose Swift API. To use Swift's functions from Objective-C[About]
Objective-C consumer with Swift static library
Follow Using Swift framework
Import module to the Objective-C client code[module_name]
@import module_name;
More examples here
来源:https://stackoverflow.com/questions/31099596/importing-swift-framework-into-a-objective-c-project