xcode 无法分配给属性:“self”是不可变的

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31368787/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 07:27:59  来源:igfitidea点击:

Cannot assign to property: 'self' is immutable

xcodeswiftuipageviewcontroller

提问by grahamcracker1234

I am creating a page view application. I have written code for the ViewController:

我正在创建一个页面视图应用程序。我已经为 ViewController 编写了代码:

import UIKit

class ViewController: UIViewController {

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

@IBAction func restartAction(sender: AnyObject) {}

override func viewDidLoad() {
    super.viewDidLoad()

    self.pageTitles = NSArray(objects: "This Is Page One!", "This Is Page Two!")
    self.pageImages = NSArray(objects: "page1", "page2")

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

    self.pageViewController.dataSource = self // <–– Error

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

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

    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.height - 60)

    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.
}

func viewControllerAtIndex(index: Int) -> ContentViewController {
    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) {
        return ContentViewController()
    }

    let 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
}



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

    let 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? {

    let 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)

}

}

But I am getting an error on this line self.pageViewController.dataSource = self. The error is:

但是我在这条线上遇到了一个错误self.pageViewController.dataSource = self。错误是:

Cannot assign to property: 'self' is immutable

无法分配给属性:“self”是不可变的

I am unsure of why self is immutable and how to fix it. If someone could please help, thanks in advance.

我不确定为什么 self 是不可变的以及如何修复它。如果有人可以帮忙,请提前致谢。

采纳答案by Leslie Godwin

In swift you'll need to call self.pageViewController.setDelegate(self)

在 swift 你需要打电话 self.pageViewController.setDelegate(self)

Delegates have been declared as methods, not properties in some cases

在某些情况下,委托已被声明为方法,而不是属性

回答by Dave Roberts

I think the compiler is not being very helpful here - try declaring the controller as following datasource protocol and see if that fixes this odd error

我认为编译器在这里不是很有帮助 - 尝试将控制器声明为以下数据源协议,看看是否可以解决这个奇怪的错误

class ViewController: UIViewController, UIPageViewControllerDataSource {  etc