2015-07-06 2 views
16

Я пытался создать учебный экран в своем приложении iOS, где пользователь просматривает несколько фотографий, чтобы немного узнать о них указанной заявки. Все выглядит отлично, за исключением того, когда я строю свой проект, я получаю следующее сообщение об ошибке на самой первой строке кода:Не могу понять, почему я получаю «Class ViewController не имеет инициализаторов» Ошибка в Swift Код приложения iOS

Класс ViewController не имеет инициализаторами

Что я сделал не так?

Мой ViewController.swift код ниже

import UIKit 

//line below is where I get the error 

class ViewController: UIViewController, UIPageViewControllerDataSource { 

//end 

var pageViewController: UIPageViewController 
var pageTitles: NSArray! 
var pageImages: NSArray! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pageTitles = NSArray(objects: "", "", "") 
    self.pageImages = NSArray(objects: "page1", "page2", "page3") 

    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! 
    UIPageViewController 

    self.pageViewController.dataSource = self 

    var startVC = self.viewControllerAtIndex(0) as ContentViewController 
    var viewControllers = NSArray(object: startVC) 

    self.pageViewController.setViewControllers(viewControllers as [AnyObject], direction: .Forward, animated: true, completion: nil) 

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

} 

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

@IBAction func restartAction(sender: AnyObject) { 
} 

func viewControllerAtIndex(index: Int) -> ContentViewController 
{ 

    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) 
    { 
     return ContentViewController() 
    } 

    var vc: ContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ContentViewController") as! ContentViewController 

    vc.imageFile = self.pageImages[index] as! String 
    vc.titleText = self.pageTitles[index] as! String 

    vc.pageIndex = index 

    return vc 

} 

// Mark: - Page View Controller Data Source 

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

    var vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

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

    index-- 
    return self.viewControllerAtIndex(index) 

} 

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

    var vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if (index == NSNotFound) 
    { 
     return nil 
    } 

    index++ 

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

    return self.viewControllerAtIndex(index) 
} 

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

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

} 
+0

Alse см [Класс не имеет инициализаторами Swift] (https://stackoverflow.com/questions/27797351/class-has-no-initializers-swift?noredirect=1&lq=1) – Honey

ответ

30

Это из-за этой линии:

var pageViewController: UIPageViewController 

Вы говорите, что pageViewController не может быть пустым, но у вас нет инициализатора, что устанавливает его значение. Глядя на ваш код, я подозреваю, что вы хотите изменить его к этому:

var pageViewController: UIPageViewController! 

I went into more detail on this problem here.

+1

спасибо! Он работает сейчас! –

+0

Добро пожаловать. Не забывайте: если вы помечаете ответ как правильный, это также помогает другим людям. – TwoStraws

+0

Я собирался, но StackOverflow сказал мне подождать несколько минут :) –

7

В Swift классе каждый не опциональным объявленная переменная должна быть инициализирована в одном из приведенных способов инициализации.

В вашем случае, это переменная

var pageViewController: UIPageViewController 

объявим его как неявное развернутый необязателен двух других переменных, так как переменная гарантированно будет установлен, прежде чем она используется.

var pageViewController: UIPageViewController! 
+0

Огромное вам спасибо! Это сработало! –