Creating an instance view controller with id in Swift

Normally, I would do the following to create a view controller and install it dataSourceusing Objective-C:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Create the data model
    _pageTitles = @[@"Over 200 Tips and Tricks", @"Discover Hidden Features", @"Bookmark Favorite Tip", @"Free Regular Update"];
    _pageImages = @[@"page1.png", @"page2.png", @"page3.png", @"page4.png"];

    // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;

    PageContentViewController *startingViewController = [self viewControllerAtIndex:0];
    NSArray *viewControllers = @[startingViewController];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO 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:_pageViewController];
    [self.view addSubview:_pageViewController.view];
    [self.pageViewController didMoveToParentViewController:self];

}

Now I would like to convert it to Swift. This is my attempt:

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.

    // Create page view controller
    self.pageViewController = self.storyboard.instantiateViewControllerWithIdentifier("PageViewController") as UIPageViewController
    self.pageViewController.dataSource = self;

    var startingViewController = PageContentViewController(nibName: nil, bundle: nil)
    startingViewController = self.viewControllerAtIndex(0)
    var viewControllers: NSArray = [startingViewController];
    self.pageViewController.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection, animated: 0, 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)
}

I am not sure why it is throwing an error for:

self.pageViewController.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection, animated: 0, completion: nil)

Error: expected member name or constructor call after type name.

+4
source share
1 answer

The type of the parameter direction: UIPageViewControllerNavigationDirection, so the argument must be one of the possible values, for example. UIPageViewControllerNavigationDirection.Forward(which may be shortened to .Forward due to automatic type inference).

And the type of the parameter animated: Bool, so the argument should be trueeither or falsenot 0.

Together:

self.pageViewController.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: nil)
+7
source

Source: https://habr.com/ru/post/1543498/


All Articles