Swift代表在解开可选值的同时出乎意料地发现了零



在协议中设置我的委托继续投掷零。我尝试在其他帖子中提出了许多建议。我试图使我的协议 委派启动和运行,但是,无法解决为什么它继续投掷零。

强制解开包装,从文件中的各个位置调用代表,删除&添加弱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")
}

相关内容

最新更新