2014-09-14 10 views
8

के अनुरूप नहीं है मैं एक्सकोड 6 जीएम का उपयोग कर रहा हूं। मैं इस page view controller tutorial को लागू करने का प्रयास कर रहा हूं लेकिन उद्देश्य-सी के बजाय स्विफ्ट में लेकिन यह अपेक्षा के अनुरूप काम नहीं कर रहा है।स्विफ्ट: 'ViewController' टाइप करें प्रोटोकॉल 'UIPageViewControllerDataSource'

मैं वास्तव में git repo ढूंढने में कामयाब रहा हूं जहां कोई और ऐसा कर रहा है, लेकिन अपनी परियोजना को क्लोन करने और इसे एक्सकोड में खोलने के बाद, मुझे वही त्रुटियां मिल रही हैं जो मुझे मिल रही हैं। UIPageViewControllerDataSource प्रोटोकॉल को कार्यान्वित करते समय प्रोटोकॉल अनुरूपता समस्या को छोड़कर मैंने उनमें से अधिकांश को हल करने में कामयाब रहा है।

ईमानदार होने के लिए, मैं स्विफ्ट में ? और ! के उपयोग को पूरी तरह से समझ नहीं पा रहा हूं और यदि यह मेरी समस्या का कारण बन रहा है। हटा रहा है! प्रोटोकॉल के तरीकों के कार्यान्वयन में चर से अन्य त्रुटियों का कारण बनता है।

क्या कोई मदद कर सकता है?

class ViewController: UIViewController, UIPageViewControllerDataSource { 

var pageViewController : UIPageViewController? 
var pageTitles = ["Over 200 Tips and Tricks", "Discover Hidden Features", "Bookmark Favorite Tip", "FreeRegular Update"] 
var pageImages = ["page1.png", "page2.png", "page3.png", "page4.png"] 
var currentIndex = 0 

@IBAction func startWalkthrough(sender: UIButton) { 
    var startingViewController : PageContentViewController = self.viewControllerAtIndex(0)! 
    var viewControllers : NSArray = [startingViewController] 
    self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Create page view controller 
    self.pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil) 
    self.pageViewController!.dataSource = self 

    let startingViewController : PageContentViewController = self.viewControllerAtIndex(0)! 
    let viewControllers: NSArray = [startingViewController] 
    self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil) 

    // Change the size of page view controller 
    self.pageViewController!.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 30); 

    self.addChildViewController(self.pageViewController!) 
    self.view.addSubview(self.pageViewController!.view) 
    self.pageViewController!.didMoveToParentViewController(self) 

} 

func pageViewController(pageViewController: UIPageViewController!, 
    viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { 

     var index = (viewController as PageContentViewController).pageIndex 

     if index == 0 || index == NSNotFound { 
      return nil 
     } 

     index!-- 

     println("Decreasing Index: \(index)") 

     return self.viewControllerAtIndex(index!) 
} 

func pageViewController(pageViewController: UIPageViewController!, 
    viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! { 

     var index = (viewController as PageContentViewController).pageIndex 

     if index == NSNotFound { 
      return nil 
     } 

     index!++ 

     println("Increasing Index: \(index)") 

     if index == self.pageTitles.count { 
      return nil; 
     } 
     return self.viewControllerAtIndex(index!); 
} 

func viewControllerAtIndex(index : Int) -> PageContentViewController? { 

    if self.pageTitles.count == 0 || index >= self.pageTitles.count { 
     return nil; 
    } 

    // Create a new view controller and pass suitable data. 
    let pageContentViewController = self.storyboard!.instantiateViewControllerWithIdentifier("PageContentViewController") as PageContentViewController 
    pageContentViewController.imageFile = self.pageImages[index] 
    pageContentViewController.titleText = self.pageTitles[index] 
    pageContentViewController.pageIndex = index 

    return pageContentViewController; 
} 

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return self.pageTitles.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return 0 
} 
} 

उत्तर

9

यह क्योंकि UIPageViewControllerDataSource प्रोटोकॉल विधि हस्ताक्षर को अपडेट किया गया है - आप उपयोग कर रहे हैं:

func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! 

func pageViewController(pageViewController: UIPageViewController!, viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! 

लेकिन अब वे हैं:

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 

जब आप एक गैर पर संदेह कर रहे हैं प्रोटोकॉल अनुरूप, एक कमांड + प्रोटोकॉल नाम पर क्लिक करने से आपको प्रोटोकॉल घोषणा में लाया जाएगा, जहां आप देख सकते हैं कि क्या आप इसका इंटरफ़ेस सही ढंग से कार्यान्वित कर रहे हैं

+1

धन्यवाद एक टन एंटोनियो! जैसे ही मैंने इसे ठीक किया, ऐप अपेक्षित के रूप में काम करता है। और टिप के लिए धन्यवाद, मुझे यह पता होना चाहिए था, लेकिन मुझे लगता है कि मैं सिर्फ प्रश्न और विस्मयादिबोधक चिह्नों को अनदेखा कर रहा था। जावा/ग्रहण पृष्ठभूमि से आ रहा है, कस्टम क्लास में उस इंटरफ़ेस को कार्यान्वित करते समय मुझे इंटरफ़ेस के तरीकों सहित स्वचालित रूप से आईडीई में उपयोग किया जाता है। –

+0

बहुत बढ़िया! सीएमडी + क्लिक चाल अन्य प्रोटोकॉल के साथ मेरे लिए काम करती है। धन्यवाद! – pekpon

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