Swift 4:在viewDidLoad之后调用(for segue :)

Ary*_*rma 4 ios segue swift swift4

我有2个VC:CouponVCCouponFeedbackVC.

优惠券VC收到品牌:品牌!来自其parentViewController.现在我想将brand.name传递给CouponFeedbackVC.

CouponVC.swift

var brandName: String!
override func viewDidLoad() {
    super.viewDidLoad
    brandName = brand.name
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "couponToFeedBack" {
        if let vc = segue.destination as? CouponFeedbackVC {
            print(brandName)
            vc.brandName = self.brandName
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在CouponFeedbackVC.swift中

var brandName: String!
override func viewDidLoad() {
    super.viewDidLoad()
    print("viewDidLoad")
    print(brandName)
}

 override func awakeFromNib() {
    print(brandName)
    self.view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)

控制台日志

nil
viewDidLoad
nil
StayUncle
Run Code Online (Sandbox Code Playgroud)

awakeFromNib() - > viewDidLoad() - > prepare(for segue :)

我没有从CouponFeedbackVC访问任何商店.

为什么在viewDidLoad()awakeFromNib()之后调用(for segue :)

Pau*_*w11 6

awakeFromNib你正在引用self.view以便打电话layoutIfNeeded.这会导致加载和viewDidLoad调用视图.

如果您删除呼叫self.view.layoutIfNeededawakeFromNib那么viewDidLoad将不会被调用,直到后prepare(for:sender:).没有理由打电话给layoutIfNeededawakeFromNib.