无法分配给 属性:'xxxx' 是一个 get-only 属性
Cannot assign to property: 'xxxx' is a get-only property
我正在使用计算 属性 来获取我的 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
我可以使用一个函数来 return 当前的书,但使用 属性 会更干净。还有别的办法吗?
发生错误是因为您没有告诉编译器如果 currentBook
的值发生变化该怎么做。编译器假定它是不可变的。
只要加一个setter,让编译器在你设置值的时候就知道要做什么了:
var currentBook: Book {
get { return books[books.count - 1] }
set { books[books.count - 1] = newValue }
}
或者,考虑使用 books.last!
:
books.last!.position = CGPoint.zero
我正在使用计算 属性 来获取我的 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
我可以使用一个函数来 return 当前的书,但使用 属性 会更干净。还有别的办法吗?
发生错误是因为您没有告诉编译器如果 currentBook
的值发生变化该怎么做。编译器假定它是不可变的。
只要加一个setter,让编译器在你设置值的时候就知道要做什么了:
var currentBook: Book {
get { return books[books.count - 1] }
set { books[books.count - 1] = newValue }
}
或者,考虑使用 books.last!
:
books.last!.position = CGPoint.zero