У меня было решение этой проблемы, которое включает переназначение переменной для себя;однако это не кажется эффективным.
fun main() {
val x = Example1()
x.listOfInt = mutableListOf(3,4)
x.listOfInt.add(455)
}
class Example1 {
var listOfInt: MutableList<Int> = mutableListOf()
set(value) {
println("setting it here to value => $value")
field = value
}
}
// It only prints:
// setting it here to value => [3, 4]
Как видите, установщик не срабатывает при добавлении значения, что эффективно меняет значение коллекции.Есть ли лучший способ сделать это?
Вот ссылка на код на детской площадке Котлина
Причина, по которой мне это странно, из-за приведенного ниже кода вSwift, который делает ожидаемое при добавлении массива:
import Foundation
class Example1 {
var fieldProperty: Int = 0
var listOfInt: [Int] = [] {
didSet {
print("setting it here to value => \(listOfInt) vs oldValue: \(oldValue)")
}
}
}
let x = Example1()
x.listOfInt = [3,4]
x.listOfInt.append(455)
// this prints:
// setting it here to value => [3, 4] vs oldValue: []
// setting it here to value => [3, 4, 455] vs oldValue: [3, 4]
Я знаю, что я мог бы сравнивать яблоки с апельсинами, но мне просто любопытно, есть ли лучшее решение.