我正在嘗試為 Unity 撰寫一個 iOS 插件,它需要使用帶有 C 層的橋接器。
插件本身是用 Swift 撰寫的。
目前我的實作是這樣的:
// 斯威夫特
@objc public class SomeClass {
@objc public func SomeFunction() -> String {
return "Hello"
}
}
// C
extern "C" {
void _someFunction() {
// I can access the Swift file using "[SomeClass shared]"
// This returns the "Hello" string correctly
NSString *helloMessage = [[SomeClass shared] SomeFunction];
}
}
這可行,但現在我需要進行異步呼叫,這需要來自 Swift 實作的回呼。
// 斯威夫特
@objc public class SomeClass {
@objc public func SomeFunction(completionHandler: (String) -> Void) {
// Gets called after some async operations
completionHandler(“hello”)
}
}
是否可以從 C 層呼叫這個 Swift 函式,你會怎么做?
// C
extern "C" {
void _someFunction() {
// ??????
}
}
uj5u.com熱心網友回復:
如果您設定好橋接,那么呼叫應該是
void _someFunction() {
[[SomeClass shared] SomeFunctionWithCompletionHandler:^(NSString * _Nonnull value) {
NSLog(@"Result: %@", value);
}];
}
順便說一句,在 Objective-C 中可見的類應該是 'is-a' NSObject,比如
@objcMembers public class SomeClass: NSObject {
public static var shared = SomeClass()
public func SomeFunction() -> String {
return "Hello"
}
public func SomeFunction(completionHandler: (String) -> Void) {
// Gets called after some async operations
completionHandler("hello")
}
}
使用 Xcode 13.2 / iOS 15.2 測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426056.html
上一篇:如何從目標c中的塊回傳布林值?
