2016-06-29 8 views
9

स्टैक ओवरव्लो पर शोध से मैंने सीखा है कि यह त्रुटि एक प्रकार को बाध्य करने का प्रयास कर रही है जो वैकल्पिक नहीं है, हालांकि इसमें इसका अर्थ नहीं है स्थिति क्योंकि यह इसके बजाय गार्ड का इस्तेमाल किया।सशर्त बाध्यकारी के लिए प्रारंभकर्ता के पास वैकल्पिक प्रकार होना चाहिए, 'UIView' नहीं

func animateTransition(_ transitionContext: UIViewControllerContextTransitioning) { 
     // Here, we perform the animations necessary for the transition 

     guard let fromVC = transitionContext.viewController(forKey: UITransitionContextFromViewControllerKey) else { return } 
     let fromView = fromVC.view 
     guard let toVC = transitionContext.viewController(forKey: UITransitionContextToViewControllerKey) else { return } 
     let toView = toVC.view 
     guard let containerView = transitionContext.containerView() else { return } 

     if self.presenting { 
      containerView.addSubview(toView) 
     } 

     let animatingVC = self.presenting ? toVC : fromVC 
     let animatingView = animatingVC.view 
     let appearedFrame = transitionContext.finalFrame(for: animatingVC) 

     var alpha: CGFloat = 1 
     if self.options.contains([.AlphaChange]) { 
      alpha = 0; 
     } 

     let initialAlpha = self.presenting ? alpha : 1 
     let finalAlpha = self.presenting ? 1: alpha 

     var dismissedFrame = appearedFrame 
     let startRect = CGRect(origin: appearedFrame.origin, size: containerView.bounds.size) 
     let offset = self.calculateStartPointOffset(startRect, options: self.options) 

     if options.contains([.Dissolve]) && !self.presenting { 
      dismissedFrame.size = containerView.bounds.size 
      dismissedFrame.origin = CGPointZero 
     } else { 
      dismissedFrame = CGRect(x: offset.x, y: offset.y, width: appearedFrame.width, height: appearedFrame.height) 
     } 

     let initialFrame = self.presenting ? dismissedFrame : appearedFrame 
     let finalFrame = self.presenting ? appearedFrame : dismissedFrame 
     animatingView?.frame = initialFrame 
     animatingView?.alpha = initialAlpha 
     let dumpingValue = CGFloat(self.options.contains([.Interactive]) ? 1 : 0.8) 

     UIView.animate(withDuration: self.transitionDuration(transitionContext), delay: 0, usingSpringWithDamping: dumpingValue, initialSpringVelocity: 0.2, options: [UIViewAnimationOptions.allowUserInteraction, UIViewAnimationOptions.beginFromCurrentState], 
            animations: 
      {() -> Void in 
       animatingView?.frame = finalFrame 
       animatingView?.alpha = finalAlpha 
      }) 
     { (completed) -> Void in 
       if !self.presenting { 
        fromView?.removeFromSuperview() 
        self.tDelegate?.didDissmisedPresentedViewController() 
       } 
       let cancelled = transitionContext.transitionWasCancelled() 
       transitionContext.completeTransition(!cancelled) 
     } 
    } 

Xcode इस लाइन पर एक त्रुटि शो:: यहाँ मेरी कोड है

guard let containerView = transitionContext.containerView() else { return } 
+0

कौन सी त्रुटि दिखाई गई है? –

उत्तर

10

transitionContext.containerView() एक गैर वैकल्पिक वापस जाने के लिए बदल गया था, ताकि आप इसे इस्तेमाल नहीं कर सकते एक सशर्त में एक चर प्रारंभ करने में guard या if let की तरह बाध्यकारी।

आपको लगता है कि लाइन से guard निकाल देना चाहिए:

let containerView = transitionContext.containerView() 
+0

धन्यवाद। यह अब गार्ड की स्थिति से कोड के इस टुकड़े को हटाने के बाद काम कर रहा है। –

+0

उपर्युक्त सुझाई गई रेखा के साथ मुझे एक और त्रुटि मिलती है, "गैर-फ़ंक्शन प्रकार UIView के मान को कॉल नहीं कर सकता; ठीक करें: हटाएं()" कोई विचार? – tylerSF

2

कंटेनर दृश्य जिसमें एक प्रस्तुति होती है। यह प्रस्तुति और प्रस्तुत दृश्य नियंत्रक के विचार दोनों का पूर्वज है।

यह containerView एनीमेशन नियंत्रक के लिए पारित किया जा रहा है और यह वापसी के लिए एक गैर वैकल्पिक

नोट है:

/var वैकल्पिक बाध्यकारी केवल अभिव्यक्ति के दाईं ओर का परिणाम है काम करता है, तो कर देते हैं जब एक वैकल्पिक यदि दाएं तरफ का परिणाम वैकल्पिक नहीं है, तो आप इस वैकल्पिक बाध्यकारी का उपयोग नहीं कर सकते हैं। इस वैकल्पिक बाध्यकारी का बिंदु शून्य के लिए जांचना है और यदि यह गैर-शून्य है तो केवल चर का उपयोग करें।

संबंधित मुद्दे