Swift到Kotlin,管理不可变列表

时间:2017-12-10 11:16:25

标签: arrays swift kotlin immutability

我正在尝试将现有的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)
    }
}

设计目标是:

  1. cards属性在类外无法修改,因此其类型应为List<Card>

  2. fun add(card: Card)应修改内部cards列表

  3. 有没有办法在Kotlin中实现这一点而不使用两个单独的属性 - 一个private var mutableCards: MutableList<Card>和一个计算属性val cards: List<Card> get() = this.mutableCards

    对于这种情况,我需要一些最佳实践。

1 个答案:

答案 0 :(得分:0)

由于只读List是&#34;引擎盖下#34;也是一个mutable list,您可能希望利用转换为MutableList,这样做:

class Card {
}

class Deck(cards:List<Card>){
    var cards:List<Card>

    init {
       this.cards = cards
    }

    public fun add(card:Card) {
      (cards as MutableList<Card>).add(card)
   }
}

fun main(args: Array<String>) {    
   var cards:List<Card> = arrayListOf()
   // here I can't modify cards
   var deck = Deck(cards)
   deck.add(Card())
   print(deck.cards.count()) // printing 1
}

能够对其进行测试,复制并粘贴here