Swift: Typ "ViewController" nicht entsprechen protocol 'UIPageViewControllerDataSource'
Bin ich mit Xcode 6 GM. Ich bin der Versuch der Umsetzung dieser page view controller tutorial aber in Swift statt Objective-C aber es funktioniert nicht wie erwartet.
Ich habe es tatsächlich geschafft, zu finden, eine git repo, wo jemand anderes das gleiche tun, aber nach dem Klonen Ihr Projekt und öffnen Sie in Xcode, hat es die gleichen Fehler, die ich immer bin. Ich habe es geschafft zu beheben, die meisten von Ihnen, außer für die Protokoll-conformance-Problem bei der Umsetzung der UIPageViewControllerDataSource Protokoll.
Um ehrlich zu sein, ich nicht ganz verstehen, die Verwendung von ?
und !
im Swift-und wenn, was mein Problem ist. Entfernen der ! von den Variablen, die in der Umsetzung des Protokolls die Methoden andere Fehler verursacht.
Könnte mir bitte jemand helfen?
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
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es, weil die
UIPageViewControllerDataSource
Protokoll aktualisierte Signaturen - Sie verwenden:aber jetzt sind Sie:
Wenn Sie im Zweifel auf ein nicht-konformes Protokoll, Befehl+Klicken Sie auf den Protokoll-Namen bringt Sie auf die Protokoll-Erklärung, wo Sie sehen können, wenn Sie die Umsetzung Ihrer Schnittstelle korrekt