我的项目与一个用目标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