【问题标题】:Immutable value of type '[String]' only has mutating member'[String]' 类型的不可变值只有变异成员
【发布时间】:2015-07-30 13:06:57
【问题描述】:

在我的 swift 项目中得到 Immutable value of type '[String]' only has mutating member 的错误并研究了一些答案,但似乎没有一个能在我的上下文中解决问题。看一看: 导入 UIKit

class PassionViewController: UIViewController {

   var factIndex = 0
   var counter = 1


    @IBOutlet var QuoteImage: UIImageView!

    @IBOutlet weak var funFactLabel: UILabel!

    let factBook = FactBook()
    let Liked = Favourite()
    override func viewDidLoad() {
        super.viewDidLoad()



        funFactLabel.text = factBook.factsArray[factIndex]
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }




    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

    @IBAction func showFunFact() {
        factIndex++
        if (factIndex >= factBook.factsArray.count) {
            self.factIndex = 0
        }
        funFactLabel.text = factBook.factsArray[factIndex]

        if counter == 36 {

            counter = 1

        } else {

          self.counter++

        }

        QuoteImage.image = UIImage(named: "frame\(counter).jpg")

    }
    @IBAction func goBack() {
        factIndex--
        var number = factBook.factsArray.count-1
        if (factIndex < 0){
            self.factIndex = number


        }
        funFactLabel.text = factBook.factsArray[factIndex]
        if counter == 1 {

            counter = 36

        } else {

            self.counter--

        }

        QuoteImage.image = UIImage(named: "frame\(counter).jpg")

    }
    @IBAction func Like() {


    let currentQuote = factBook.factsArray[factIndex]
           Liked.favouriteArray.append(currentQuote)
        }
    }

let currentQuote = factBook.factsArray[factIndex], factBook.factsArray 是从另一个视图控制器检索到的,它是一个数组集合。 Liked.favouriteArray.append(currentQuote) 是将此元素存储到 favouriteArray 中,它来自一个名为 Favourite 的结构:

import Foundation



struct Favourite {

    var favouriteArray:[String] = []








}

但是,Liked.favouriteArray.append(currentQuote) 行正在生成错误:“[String]”类型的不可变值只有可变成员。我该如何解决这个错误?

【问题讨论】:

    标签: ios arrays swift


    【解决方案1】:

    不清楚,因为您没有提供Favourite 类型,但我认为它要么是struct,要么是包含factsArray 作为let 变量的class。无论哪种情况,您都在尝试修改 let 变量,这是不允许的(改变不可变值)。 likedfactsArray 必须是 var。 (如果Favouritestruct,那么liked 在任何一种情况下都必须是var。)

    请注意,Swift 函数、方法、属性和变量应以小写字母开头。前导大写字母表示类型。

    【讨论】:

    • 但是请注意,factsArray 是一个 let 和 like in a var。
    • let Liked = Favourite() 在上面的代码中。这将使整个结构(包括其包含的数组)成为只读的,即使底层数组标记为var
    • 删除了错误就像一个魅力谢谢!你应得的 117K 代表。
    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多