swift - 从 ObjC 访问函数到 Swift 包的正确语法是什么?
问题描述
简单场景:我想从 Objective-C 中调用任何 Swift Package 成员函数。
我正在构建一个参考/演示/概念验证应用程序来混合 ObjC 和 Swift。
这是 Swift 方面的一个工作片段:
import Foundation
import RicPackage
final class Greetings: NSObject {
@objc public static let shared = Greetings()
private override init() {}
@objc public func doSomething(name: String) {
print("Do something, \(name)")
let ricClass = RicClass()
ricClass.sayHello()
}
@objc public func hello() {
print("Hello Everybody!")
}
}
这是Objective-C方面:
#import "ViewController.h"
#import "ObjcSwiftHeader-Swift.h"
@class RicClass;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"Inside VC ViewDidLoad.");
Greetings *greetings = [Greetings shared];
[greetings hello];
[greetings doSomethingWithName: @"Ric"];
RicClass *ricClass = [RicClass alloc];
}
@end
我得到了这个编译器错误:
这是该项目的快照:
这是 Swift 包的东西:
import Foundation
public struct RicStruct {
public private(set) var text = "Hello, World!"
public init() {
}
public func sayHello() -> String {
"Hello Ric!"
}
}
public class RicClass: NSObject {
@objc public var msg = "Mother has a feeling, I might be too appealing."
@objc public let text = "Hello Everybody!"
public override init() {}
public func sayHello() {
print(text)
}
public func doSomething() {
print("Inside doSomething()")
}
}
必须有一个简单的解决方案......
解决方案
包作为动态嵌入式框架链接到您的应用程序中,要使用它们,您应该将包的库导入源文件:
迅速:
import RicPackage
目标-C:
@import RicPackage;
推荐阅读
- android - Opencv 4.1.1 Android 链接错误
- swiftui - 通过按钮中的赋值更新 EnvironmentObject 变量
- java - HttpClient 在响应代码 404 上引发异常。这是设计使然还是我做错了什么?
- capybara - “DevTools 监听”后幻影挂起
- python - 如何在 python 中链接上下文管理器?
- ruby-on-rails - 上传 JPG 图像时出现 Imagemagick 回形针错误
- python - pandas.DataFrame.to_csv 在与先前数据相同的行上添加数据
- reactjs - 是否可以在反应渲染函数之外访问状态变量?
- c - 如何在 C 中的库中初始化数组大小?
- python - 有没有办法在具有由阈值定义的彩色部分的条形图上绘制数据?