将Swift框架导入Obj-C

3
我有一个用Swift编写的框架,就像这样。
import Foundation
import WebKit
import ObjectiveC

public extension WKWebView {

    public func someFunc(_ completionHandler:@escaping (_ capturedImage: UIImage?) -> Void) {
        //Some code
    }
}

当我构建框架并导入使用Cocoapods作为依赖管理的Objective-C代码时,我无法调用someFunc函数。错误显示如下:

'WKWebView'没有公开的接口声明'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个回答

1
我尝试了以下步骤,对我有效:
  1. 在 Objc 文件中不要导入 Swift 文件,例如:#import "ExampleFile.swift",而是使用 #import "ProjectName-Swift.h"
  2. 确保您在想要导入到 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];
}

感谢: 在Swift下出现“顶层声明符号后应有';'”的问题


非常感谢,我在 Swift 函数中加入了 @objc 关键字,现在它可以正常工作了。 - XenixDANA
很高兴能帮忙 :) - Arun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接