我定义了一个自定义协议并使用了Class and Protocol Existential
,这是Swift 4中的新功能。它在运行时出错。这是我的代码:
protocol CustomProtocol: UIScrollViewDelegate {}
var test: UIViewController & CustomProtocol = UITableViewController() as! UIViewController & CustomProtocol
答案 0 :(得分:1)
您想要实现的目标是 Swift4 中的协议组合。
在您的代码中:
protocol CustomProtocol: UIScrollViewDelegate {}
var test: UIViewController & CustomProtocol = UITableViewController() as! UIViewController & CustomProtocol
test
将接受类型为UIViewController
且符合CustomProtocol
的任何内容。
您正在为其分配UITableViewController
的对象。但UITableViewController
不符合CustomProtocol
因此导致问题。
示例:强>
protocol CustomProtocol: UIScrollViewDelegate
{
}
class TableViewController: UITableViewController, CustomProtocol
{
}
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
var test: UIViewController & CustomProtocol = TableViewController() //HERE..
}
}