簡體   English   中英

委托Objective-C和Swift之間的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM