我已经研究了100次,但仍无法找到问题的答案。我有一个非常简单的协议,但总是nil
。我已尝试添加periodDelegate = self
,但收到错误Cannot assign value of type 'ScoreClockPopoverViewController' to type 'PeriodDelegate!'
我有其他协议,使用相同的设置并正常工作。
我错过了什么?
提前致谢!
import UIKit
protocol PeriodDelegate {
func changePeriodButtonImage(selectedPeriod: Period)
}
class ScoreClockPopoverViewController: UIViewController {
//delegate
var periodDelegate: PeriodDelegate!
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad / periodDelegate \(String(describing: periodDelegate!))")
}
}
我需要调用的函数是在UICollectionViewCell`
中class HeaderCollectionViewCell: UICollectionViewCell {
override func awakeFromNib() {
super.awakeFromNib()
...
}
extension HeaderCollectionViewCell: PeriodDelegate {
func changePeriodButtonImage(selectedPeriod: Period) {
print("blah")
switch selectedPeriod {
case .first:
print("first")
case .second:
print("second")
case .third:
print("third")
case .overtime:
print("overtime")
case .shootout:
print("shootout")
}
}
}
答案 0 :(得分:0)
首先,将cell作为视图控制器的委托是非常罕见的。通常,它是另一种方式。但无论如何,在你的情况下,你必须将periodDelegate
设置为此单元格,而不是自己。导致您的单元实现委托协议而不是VC。但更好地重新思考你想做什么,因为它闻起来像糟糕的设计。
答案 1 :(得分:0)
你的陈述“我有一个非常简单的协议,但总是没有。”没有意义。
协议是一种专业语言。它不能是零或非零。
您的ScoreClockPopoverViewController
具有符合periodDelegate
协议的委托属性PeriodDelegate
,该委托属性为nil。
委托是与其他任何财产一样的财产。除非您为其指定值,否则它将为零。这是零,因为您从未将对象指定为ScoreClockPopoverViewController
的委托。
谁创建ScoreClockPopoverViewController
的实例,以及哪个对象应该是您ScoreClockPopoverViewController
的代表?
发布创建ScoreClockPopoverViewController
的代码。这可能是您需要分配代理人的地方。该代码可能如下所示:
let myScoreClockPopoverViewController = storyboard.instantiateViewControllerWithIdentifier("ScoreClockPopoverViewController")
myScoreClockPopoverViewController.periodDelegate = self
present(myScoreClockPopoverViewController,
animated: true,
completion: nil)
(该代码仅供参考,您需要对其进行修改以使其在您的应用中发挥作用。无法在未经修改的情况下将其粘贴到您的应用中。)
如果您将myScoreClockPopoverViewController显示为弹出窗口,顾名思义,您需要调整上面的代码。
答案 2 :(得分:0)
我遇到了同样的问题,我只是通过更改
来解决了方明的回答。var periodDelegate: PeriodDelegate!
到
weak var periodDelegate: PeriodDelegate? = nil
并将呼叫更改为
periodDelegate?.blablabla()
Swift - Error passing data between protocols / delegates (found nil)