2017-10-09 12 views
-1

すぐに習得してください、助けてください - スイフト3からコード4を更新する - ビルド時に次のエラーが発生する:引数ラベル '(_ :, viewControllerAfterViewController :)'が使用可能なオーバーロードと一致しません

引数ラベル '(_ :, viewControllerAfterViewControllerは:)' は任意の利用可能な過負荷に一致していない

私は、このエラーに関連するコードは以下のgoToNextVCのFUNCであると信じて:

 func goToNextVC() { 
    let nextVC = pageViewController(self, viewControllerAfterViewController: viewControllers![0])! 
    setViewControllers([nextVC], direction: .Forward, animated: true, completion: nil) 
} 



    extension ViewController: UIPageViewControllerDataSource { 

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 

    // navigate right 
    switch viewController { 
    case cardsVC: 
     return profileVC 
    case profileVC: 
     return nil 
    case matchesVC: 
     return cardsVC 
    default: 
     return nil 
    } 
} 

フルコード:

// sets up page view controller 
    let pageController = ViewController(transitionStyle: .scroll,   navigationOrientation: .horizontal, options: nil) 

    class ViewController: UIPageViewController { 

    // page view controllers here 
    let cardsVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CardsNavController") 
    let profileVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ProfileNavController") 
    let matchesVC: UIViewController! = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MatchesNavController") 

override func viewDidLoad() { 
    super.viewDidLoad() 

    view.backgroundColor = UIColor.white 
    dataSource = self 
    // loads first view 
    setViewControllers([cardsVC], direction: .forward, animated: true, completion: nil) 
} 

// load left view 
func goToNextVC() { 
    let nextVC = pageViewController(self, viewControllerAfterViewController: viewControllers![0])! 
    setViewControllers([nextVC], direction: .Forward, animated: true, completion: nil) 
} 
// load right view 
func goToPreviousVC() { 
    let previousVC = pageViewController(self, viewControllerBeforeViewController: viewControllers![0])! 
    setViewControllers([previousVC], direction: .Reverse, animated: true, completion: nil) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


    } 

    // MARK - UIPageViewControllerDataSource 
    extension ViewController: UIPageViewControllerDataSource { 

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 

    // navigate right 
    switch viewController { 
    case cardsVC: 
     return profileVC 
    case profileVC: 
     return nil 
    case matchesVC: 
     return cardsVC 
    default: 
     return nil 
    } 
} 

// navigate left 
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 

    switch viewController { 
    case cardsVC: 
     return matchesVC 
    case profileVC: 
     return cardsVC 
    case matchesVC: 
     return nil 
    default: 
     return nil 
    } 
} 

}

答えて

0

この:なるように

let nextVC = pageViewController(self, viewControllerAfterViewController: viewControllers![0])! 

ニーズ:

let nextVC = pageViewController(self, viewControllerAfter: viewControllers![0])! 

そして、あなたはそれでいる間、あなたは取り除く必要があります強制アンラップ(!)のpageViewController(_:viewControllerAfter:)nilを返し、!を使用するとアプリがクラッシュする可能性があります。

func goToNextVC() { 
    if let viewControllers = viewControllers { 
     if let nextVC = pageViewController(self, viewControllerAfter: viewControllers[0]) { 
      setViewControllers([nextVC], direction: .Forward, animated: true, completion: nil) 
     } 
    } 
} 
関連する問題