我的项目与一个用目标C编写的viewcontroller(objCViewController)组合在一起,另一个由swift(SwiftViewCOntroller)编写。
我有几个变量NSString。我想在objCViewController中更新字符串,并通过使用委托在SwiftViewController中访问它,因为我需要在这两个viewcontroller之间进行连续更改,并不断更新字符串。

这是代码:

objCViewController.h

#import <UIKit/UIKit.h>

@protocol MyDelegate <NSObject>
@end

@interface objCViewController : UIViewController{
  NSString * stringbeingpassed;
}

@property (nonatomic, weak) id<MyDelegate> delegate;
@property (nonatomic, retain) NSString * stringbeingpassed;
@end


objCViewController.m

@implementation objCViewController
@synthesize delegate;
@synthesize stringbeingpassed;

- (void)updatestring {
  //update string in this method
  NSString * newstring = @"testing";

  if (delegate != nil && [delegate respondsToSelector:@selector(stringUpdated:)]) {
    [delegate stringUpdated: newstring];
}


}

桥接header.h:

#import "objCViewController.h"


SwiftViewController.swift:

protocol MyDelegate {
func stringUpdated(newMessage: String)
}

import UIKit
@objc class SwiftViewController: UIViewController, MyDelegate{
override func viewDidLoad() {
    super.viewDidLoad()
}

func stringUpdated(newMessage:String) {
let newMessage = "sent string"
}


我试图使用委托,但我不知道如何使用它。我是敏捷而客观的C语言的新手

Q1。我想问一下如何在objCViewController中分配我的新字符串以委托,然后将其传递给SwiftViewController。

Q2。另一个问题是如何在SwiftViewController中的委托中检索数据。我应该添加什么?

Q3。在定义委托人时我还缺少其他什么?我是否需要在两个ViewController中都定义它?
谢谢。

最佳答案

由于所提供的信息很少,因此很难说代表是否是该工作的正确工具。实际上,我可能建议研究更好的方法来构建您的应用程序。

话虽如此,查看协议MyDelegate的代码将很有帮助。如果尚未使用此协议,则需要一个“ func”来接受“ String”作为参数/参数。现在,我们将此函数称为stringUpdated。使用提供的代码,您需要将SwiftViewController的实例设置为objCViewController中的属性委托。这样,在调用updatestring时,您可以执行以下操作:

- (void)updatestring {
    //update string in this method
    NSString * newstring = @"testing";

    if (delegate != nil && [delegate respondsToSelector:@selector(stringUpdated:)]) {
        [delegate stringUpdated: newstring]
    }
}


在SwiftViewController中,您必须采用如下协议:

@objc class SwiftViewController: UIViewController, MyDelegate {


然后通过实现功能stringUpdated遵守协议。

更新资料

您的协议仍然缺少该方法。它看起来应该像这样:

@protocol MyDelegate
- (void) stringUpdated:(NSString *)updatedString;
@end

10-07 14:54