Я использую Xcode 6 GM. Я пытаюсь реализовать этот page view controller tutorial, но в Swift вместо Objective-C, но он не работает должным образом.Swift: Тип 'ViewController' не соответствует протоколу 'UIPageViewControllerDataSource'
Мне действительно удалось найти git repo, где кто-то другой делает то же самое, но после клонирования своего проекта и открытия его в Xcode у него те же ошибки, что и я. Мне удалось решить большинство из них, кроме проблемы соответствия протокола при реализации протокола UIPageViewControllerDataSource.
Если честно, я не совсем понимаю использование ?
и !
в Swift, и если это вызывает мою проблему. Удаление! из переменных в реализации методов протокола вызывает другие ошибки.
Помогло ли кто-нибудь помочь?
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
}
}
Спасибо, Антонио! Как только я это исправил, приложение работает так, как ожидалось. И спасибо за подсказку, я должен был это знать, но, думаю, я просто игнорировал вопрос и восклицательные знаки. Исходя из фона Java/Eclipse, я использую IDE автоматически, включая методы интерфейса при реализации этого интерфейса в пользовательском классе. –
Удивительный! Трюк Cmd + Click работает для меня с другим протоколом. Благодаря! – pekpon