【问题标题】:Cannot assign to property: 'xxxx' is a get-only property无法分配给属性:“xxxx”是一个只能获取的属性
【发布时间】:2017-10-21 09:47:38
【问题描述】:

我正在使用计算属性来获取我的books 数组中的最后一本书。但是,我似乎无法使用此属性直接设置一本书的 position 属性,如下所示:

struct Book {
    var position: CGPoint?
}

class ViewController: UIViewController {

    var books = [Book]()

    var currentBook: Book {
        return books[books.count - 1]
    }

    func setup() {
        // Compiler Error: Cannot assign to property: 'currentBook' is a get-only property
        currentBook.position = CGPoint.zero
    }
}

以下工作,但我希望它更具可读性单行。

books[books.count - 1].position = CGPoint.zero

我可以使用函数返回当前书籍,但使用属性会更简洁。还有其他方法吗?

【问题讨论】:

    标签: swift computed-properties


    【解决方案1】:

    发生错误是因为您没有告诉编译器如果currentBook 的值发生了突变,该怎么办。编译器假定它是不可变的。

    只需添加一个setter,以便编译器在您设置值时知道该做什么:

    var currentBook: Book {
        get { return books[books.count - 1] }
        set { books[books.count - 1] = newValue }
    }
    

    或者,考虑使用books.last!

    books.last!.position = CGPoint.zero
    

    【讨论】:

      猜你喜欢
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多