Swift到Kotlin,管理一成不变的名单
我试图移植一个现有的Swift代码给Kotlin,我想使用以下Swift代码的最佳做法:
struct Deck { private(set) var cards: [Card] var cardsCount: Int { return self.cards.count } init(cards: [Card] = []) { self.cards = cards } mutating func add(card: Card) { self.cards.append(card) } }
设计目标是:
-
cards
属性在类之外是不可修改的,所以它的types应该是List
-
fun add(card: Card)
应该修改内部cards
列表
有没有一种方法来实现这个Kotlin没有使用两个单独的属性 – 一个private var mutableCards: MutableList
和一个计算属性val cards: List get() = this.mutableCards
对于这种情况,我需要一些最佳实践。
由于只读List
是“ MutableList
”,也是一个可变列表 ,所以您可能需要利用对MutableList
,这样做:
class Card { } class Deck(cards:List){ var cards:List init { this.cards = cards } public fun add(card:Card) { (cards as MutableList ).add(card) } } fun main(args: Array) { var cards:List = arrayListOf() // here I can't modify cards var deck = Deck(cards) deck.add(Card()) print(deck.cards.count()) // printing 1 }
能够测试它, 在这里复制和粘贴。