在协议中设置我的委托继续投掷零。我尝试在其他帖子中提出了许多建议。我试图使我的协议 委派启动和运行,但是,无法解决为什么它继续投掷零。
强制解开包装,从文件中的各个位置调用代表,删除&添加弱var。
列表视图:
protocol MixPlayer : class {
func playMix(message: String)
}
class IssueViewController: UIViewController {
@IBOutlet weak var issueCollection: UICollectionView!
@IBOutlet weak var issueImage: UIImageView!
var viewController: ViewController?
var collectionViewtitle: String?
var mixImageName: String?
var mixList: [[String: String]]!
weak var mixDelegate: MixPlayer?
override func viewDidLoad() {
super.viewDidLoad()
issueCollection.dataSource = self
issueCollection.delegate = self
}
}
....
extension IssueViewController: UICollectionViewDelegate, UICollectionViewDataSource {
....
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let url = mixList[indexPath.row]["url"] {
mixDelegate?.playMix(message: url)
}
}
}
查看控制器:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var mainContainer: UIView!
@IBOutlet weak var playerEmbedView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let secondVC = IssueViewController()
secondVC.mixDelegate = self
}
}
extension ViewController: MixPlayer {
func playMix(message: String) {
print(message)
}
}
任何调用的尝试
mixDelegate?.playMix(message: url)
不成功。目前,我只是想记录基本打印语句。
可能会在ViewController
内部进行 secondVC
。使该属性在您的ViewController
中。
class ViewController: UIViewController {
@IBOutlet weak var mainContainer: UIView!
@IBOutlet weak var playerEmbedView: UIView!
lazy var secondVC: IssueViewController = {
let secondVC = IssueViewController()
secondVC.mixDelegate = self
return secondVC
}()
override func viewDidLoad() {
super.viewDidLoad()
}
...
}
要知道您的班级是否被划分,请在上面添加带有打印语句的DEINIT。
deinit {
print("Deallocated")
}