我无法在 Swift 的类中创建空数组属性

Posted

技术标签:

【中文标题】我无法在 Swift 的类中创建空数组属性【英文标题】:I can't create a empty array property in a class in Swift 【发布时间】:2020-07-04 09:58:37 【问题描述】:

我想在 Xcode Swift 中创建一个类,请看这段代码:

class Cards 

    var roundNumber = 10
    var monsters:[
        (Id: Int, Name:String, Description: String, Attack_min: Int, Attack_max: Int, Health: Int, VP: Int, Gold:Int)] = [
        (Id: 1, Name: "Ice dragon", Description: "Attack on Wizards +1", Attack_min: 2, Attack_max: 5, Health: 4, VP: 2, Gold: 4),
        (Id: 2, Name: "Fire dragon", Description: "Attack on Wariors +2", Attack_min: 2, Attack_max: 5, Health: 4, VP: 2, Gold: 4),
        (Id: 3, Name: "Acid witch", Description: "Attack of all heroes -1 \n(Only -1 on heroes)", Attack_min: 3, Attack_max: 6, Health: 5, VP: 4, Gold: 5),
        (Id: 4, Name: "Killer rats", Description: "Health -1 when attacked by supporting cards ", Attack_min: 2, Attack_max: 6, Health: 3, VP: 1, Gold: 3)
    ]
   var monsterDeck = [Any]()

    func randomizer(lowestNumber: Int, highestNumber: Int) -> Int 
        return Int.random(in: lowestNumber ... highestNumber)
    

    func round() 
        if self.roundNumber == 10 
            self.monsters.shuffle()
            self.monsterDeck = self.monsters
         else 
            self.monsterDeck.removeFirst()
        

        self.roundNumber -= 1
    


var cards = Cards()
cards.round()

print("\(cards.monsterDeck[0].Name)\n")
print(cards.monsterDeck)
print(cards.roundNumber)

var monsters 是一个数组,我要自己更新 我想洗牌并将其存储在 var monsterDeck

我想要的是,每次我运行函数 round() 时,我都想要一张洗牌的新怪物卡,并且应该移除第一个怪物卡组。

但在底部你会看到 print("\(cards.monsterDeck[0].Name)\n") 并且我得到一个错误:

error: MyPlayground.playground:34:31: error: value of type 'Any' has no member 'Name'
print("\(cards.monsterDeck[0].Name)\n")

那么我该如何解决这个问题?基本上我希望 var monsterDeck 是一个数组,它是数组怪物的洗牌版本

我检查了this article,但这些答案假设数组只是字符串或整数。

我的例子有字符串和整数字段

【问题讨论】:

【参考方案1】:

为您的Monster 数据使用结构,而不是元组,然后创建这些结构的数组:

var monsterDeck = [Monster]()

通过使用Any 作为类型,您将丢失关于牌组中内容的所有详细信息。

【讨论】:

以上是关于我无法在 Swift 的类中创建空数组属性的主要内容,如果未能解决你的问题,请参考以下文章

无法在 CoreData 子类中创建新属性? iOS8 Swift3

怎样在MATLAB中创建空的N维数组?

PHP 在 NFS 共享目录中创建空会话

我们可以在 Swift 中创建具有非可选属性的类型擦除弱引用吗?

如何在 Swift 中设置属性本身可变的属性值

iOS Swift:如何根据特定属性查找不同类型数组的唯一成员