不能在不可变值部分上使用mutating成员是一个let常量(swift3)

时间:2017-08-19 18:30:49

标签: ios swift xcode swift3

我无法使用此代码找到错误

我对sections.append(eventMois)

有以下错误消息

不能在不可变值部分使用变异成员是一个让常量

感谢您的帮助

 class DashboardViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ExpandableHeaderViewDelegate {

     var sections : [Section]?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        // Receive user defaults which we stored when user logged in

        let defaults = UserDefaults.standard
        let firstname = defaults.string(forKey: "usernameValue")
        let lastname = defaults.string(forKey: "nameValue")
        let connect_email = defaults.string(forKey: "emailValue")
        guard let eventMois = defaults.array(forKey: "event_mois") as? [Section] else {return}

        if let sections = sections {
            sections.append(eventMois)
        } else {
            sections = eventMois
        }

        }

2 个答案:

答案 0 :(得分:1)

这是您的问题

if let sections = sections {
            sections.append(eventMois)
        } else {
            sections = eventMois
        }

如果让sections错误消息而无法更改,那么你需要一个简单的if!= nil检查

替换为

if sections != nil {
            sections.append(eventMois)
        } else {
            sections = eventMois
        }

或像这样的后卫

  guard sections != nil else{
         sections = eventMois
         return
     }
  sections.append(eventMois)

希望这有帮助

答案 1 :(得分:1)

最有效的解决方案是将数组声明为非可选的空数组

var sections = [Section]()

然后不需要整个if - let表达式,您只需编写

即可
sections.append(eventMois)

sections = eventMois

在表达式中考虑

if let sections = sections {
        sections.append(eventMois)
第二行中的

sections是可选的绑定局部变量,声明的数组导致错误,因为局部变量是不可变的。