将 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 桥接到 Swift 后缺少啥

如何全局导入 Swift 框架?

Obj-C 框架返回 nil,并让我的 Swift 代码崩溃,说“致命错误:在展开可选值时意外发现 nil”

Obj-C 框架返回 nil,并让我的 Swift 代码崩溃,说“致命错误:在展开可选值时意外发现 nil”

发布我自己的 CocoaPod 框架

发布我自己的 CocoaPod 框架