如何实现Swift ViewController向Objective-C ViewController传递数据?
Swift 向 Objective-C ViewController 传递 URL 数据的解决方案
问题核心:你把imageURL属性放在了SUOTAViewController的**类扩展(@interface SUOTAViewController ())**里,类扩展中的属性默认是内部私有访问级别,Swift代码没法直接访问,这就是赋值无效的原因。
解决步骤:
把属性移到公开头文件
打开SUOTAViewController.h,添加公开属性声明:@interface SUOTAViewController : UIViewController // 保留原有其他声明 @property (nonatomic, strong) NSURL *imageURL; // ARC下用strong替代retain更合适 @end头文件里的属性是公开的,Swift能通过自动生成的桥接文件访问到。ARC环境中
strong和retain功能一致,但strong是现代写法,更清晰。删除类扩展中的重复声明
删掉SUOTAViewController.m里类扩展中的@property (nonatomic, retain) NSURL *imageURL;,避免重复定义。(可选)在OC中使用传递来的URL
如果需要用这个URL替换原来的storage.file_url,可以在viewDidLoad里添加:- (void)viewDidLoad { [super viewDidLoad]; // ... 原有代码 if (self.imageURL) { storage.file_url = self.imageURL; } // ... 原有代码 }
验证
你的Swift代码不需要修改,原代码:
func navigateToUpdateViewController(imageURL: URL) { let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewController(withIdentifier: "suotaViewController") as! SUOTAViewController vc.imageURL = imageURL self.navigationController?.pushViewController(vc, animated: true) }
现在可以正常给OC的ViewController赋值imageURL了。
内容的提问来源于stack exchange,提问作者Dylon Jaynes
相关产品推荐
相关产品推荐

