斯威夫特3 - RootViewController的委托设置为导航控制器
问题描述:
在我的斯威夫特3 /的OBJ-C的应用程序,我想为我设置RootViewController的其导航控制器的代表,但我得到以下错误:斯威夫特3 - RootViewController的委托设置为导航控制器
Cannot assign value of type 'NavController.Type' to type 'RootViewControllerDelegate'
NavController.swift
@available(iOS 10.0, *)
@objc class NavController: UINavigationController, RootViewControllerDelegate {
static func instantiate() -> NavController? {
let storyboard = UIStoryboard.init(name: "MyStoryboard", bundle: nil)
let navVC = storyboard.instantiateViewController(withIdentifier: "NavController") as? NavController
let rootVC = navVC?.viewControllers.first as! RootViewController
rootVC.delegate = self // <<<< ERROR OCCURS HERE
return navVC
}
func pressedNextButton()
{
NSLog("Next button works!")
}
}
RootViewController.swift
@objc protocol RootViewControllerDelegate {
func pressedNextButton()
}
@available(iOS 10.0, *)
@objc class RootViewController: UIViewController, NSFetchedResultsControllerDelegate, UITableViewDataSource, UITableViewDelegate {
var delegate: RootViewControllerDelegate?
@IBAction func nextButton(_ sender: UIBarButtonItem) {
self.delegate?.pressedNextButton()
}
}
MainProgram.m
@interface MYQAddDeviceViewController()
@property (nonatomic, strong) NavController * navVC;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.navVC = [NavController instantiate];
}
我如何能解决这个错误任何想法?
答
你得到错误,因为该行
rootVC.delegate = self
是一个static func
内,在这方面,self
指NavController
元类的实例的,亦即NavController.Type
代替NavController
。
你想:
if let navVC = storyboard.instantiateViewController(withIdentifier: "NavController") as? NavController,
let rootVC = navVC.viewControllers.first as? RootViewController {
rootVC.delegate = navVC
}
为什么你的类定义之前把@objc两者都是的UIViewController子类? – Mozahler
这些swift类用于我的应用程序的Obj-C部分,它需要使用@objc。 – Vee
你可以通过从uiviewcontroller继承而获得免费的。换句话说,你不再需要它。 – Mozahler