在swift中没有调用的协议方法

时间:2015-07-02 12:17:49

标签: ios swift

我已经在目标c文件中快速使用了协议,但这里没有调用协议方法是代码

@Swift文件

@objc protocol clickBookmarksProtocolDelegate
{
 func openbook(bookmark : String)
}
var delegate : clickBookmarksProtocolDelegate?

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
  a = data[indexPath.row][main]
  println(a)
  if (a == "Bookmarks")
  {
     self.delegate?.openbook(data[indexPath.row][url])
     dismissViewControllerAnimated(false, completion: nil)
  }

@obj C .m文件

#import "Video_Downloader-Swift.h"

@interface BrowserViewController() <clickBookmarksProtocolDelegate>

@end

- (void)openbook:(NSString * __nonnull)bookmark
{
 [self loadAddress:bookmark];
 _addressBar.text=bookmark;
}

方法不会调用

1 个答案:

答案 0 :(得分:1)

好吧,你不应该为此使用委托。代表被用作某种回调。例如,想象一下你有一个控制器会显示另一个:

FirstViewController -> SecondViewController

当您的SecondViewController想要调用FirstViewController时,会使用

Delegates。

在您的情况下,您只想显示SecondViewController,为此您有几个选项。

如果您有导航视图控制器,最简单的方法是在didSelectCell方法中推送新的BrowserViewController:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.navigationController?.pushViewController(BrowserViewController(), animated: true)
}