gpt4 book ai didi

arrays - Swift 到 Kotlin,管理不可变列表

转载 作者:行者123 更新时间:2023-11-30 11:56:41 25 4
gpt4 key购买 nike

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

有没有一种方法可以在 Kotlin 中实现此目的,而无需使用两个单独的属性 - 一个 private var mutableCards: MutableList<Card>和一个计算属性 val cards: List<Card> get() = this.mutableCards

我需要一些针对这种情况的最佳实践。

最佳答案

由于只读 List 在“底层”也是一个 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

关于arrays - Swift 到 Kotlin,管理不可变列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com