[英]Delegate issue between Objective-C and Swift
我將要介紹Swift,Objective-C和C ++的基礎知識。 我正在嘗試在Objective-C和Swift之間架起一座橋梁,並建立一個合適的委托(MyDelegate)。
下面的代碼運行正常,但是從靜態函數調用Swift函數callbackInteger()
遇到了一些問題:
MyFile.mm:
static void test() {
// how to call callbackInteger?
}
MyFile.mm:
- (void)callbackToSwift:(int)testInteger {
if (self.delegate != nil) {
[self.delegate callbackInteger: testInteger];
}
}
MyDelegate.h:
@protocol MyDelegate <NSObject>
- (void) callbackInteger: (int) testInteger;
@end
ViewController.swift:
class ViewController: UIViewController, MyDelegate {
func callbackInteger(_ testInteger: Int) {
print("testInteger: \(testInteger)");
}
}
注意 :我真的不知道如何使用委托調用來實現對callbackInteger函數的調用。
協議不過是類必須實現的一組要求(方法)而已。 我們說一類符合協議。
因此,在您的靜態函數test()
,如果周圍沒有實例/對象(此處為ViewController
),則無法調用協議的方法。 一種工作方式(但不一定是一種漂亮的方式)是將ViewController的實例存儲在某個地方(例如,作為全局變量),以便在函數中重用它。
像這樣的東西:
// Top of your file
#import <Foundation/Foundation.h>
// other headers...
id<MyDelegate> globalDelegate;
static void test() {
[globalDelegate callbackInteger:42];
}
// rest of your file
有很多關於協議和委派模式的資源,例如Apple的本指南 。 仔細閱讀他們如何在Cocoa&Cocoa Touch中使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.