将 Swift 框架导入到 Obj-C
Posted
技术标签:
【中文标题】将 Swift 框架导入到 Obj-C【英文标题】:Import Swift framework to Obj-C 【发布时间】:2020-12-14 07:16:38 【问题描述】:我有这样用 Swift 编写的框架。
import Foundation
import WebKit
import ObjectiveC
public extension WKWebView
public func someFunc(_ completionHandler:@escaping (_ capturedImage: UIImage?) -> Void)
//Some code
当我构建框架并导入使用 Cocoapods for Dependency Manager 的 Objective-C 代码时。我不能调用上面的 someFunc 函数。错误是这样说的:
“WKWebView”没有可见的@interface 声明选择器“someFunc”
这就是我在 Objective-C 中实现 Swift 框架的方式:
#import <Foundation/Foundation.h>
#import <ProjectName-umbrella.h>
@implementation CapturerDefault
- (void)captureWebViewScreenWith:(UIView *)containerView
andCompletionHandler:(void (^)(UIImage *))completion
WKWebView *webView = [self findWebViewInViewController:containerView];
[webView someFunc: resultImage] //The error show here.
怎么了?我错过了什么吗?
【问题讨论】:
【参考方案1】:我尝试了以下步骤,它对我有用:
-
不要在 objc 文件中导入 swift 文件,例如:#import "ExampleFile.swift",而是使用 #import "ProjectName-Swift.h"
确保在要导入 objc 的 swift 代码中使用 @objc 语句
Swift 文件:
import WebKit
extension WKWebView
@objc public func someFunc()
Objective C 文件:
#import "ViewController.h"
#import "Sample-Swift.h"
#import <WebKit/WebKit.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
WKWebView *wbView = [[WKWebView alloc]init];
[wbView someFunc];
归功于: "Expected ';' after top level declarator" under Swift
【讨论】:
非常感谢,我在 func swift 中给出了@objc 关键字,它可以工作。 很高兴能帮上忙 :)以上是关于将 Swift 框架导入到 Obj-C的主要内容,如果未能解决你的问题,请参考以下文章
Obj-C 框架返回 nil,并让我的 Swift 代码崩溃,说“致命错误:在展开可选值时意外发现 nil”