声明 NSMutableArray 内容类型

Declare NSMutableArray content type

我有一段在 objective c 应用程序中使用过的代码,我想将其合并到新的 swift 项目中。问题是我无法理解语法!

我正在使用 FMDB 从 sql 数据库中获取有关卡片组的一些信息。当我从数据库中提取信息时,我创建了一个卡片对象,该对象具有数据库中描述的属性。当我访问数据库时,它 returns 我的卡片对象的 NSMutableArray。我想明确声明我的可变数组包含这些对象...

我会在 objective c 中这样写:

NSMutableArray<Card*>

我在这种情况下使用它

- (NSMutableArray<Card *> *)getCardsFromDb

所以我知道我的函数正在返回 Card 对象的可变数组。我如何在 swift 中执行此操作?

目前我项目中的代码很少

   //Properties
    var cardArray: NSMutableArray<Card>! //How can I tell it that the array is populated with my Card object?

    //View Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()

        let databaseAccess = DatabaseAccess()

        cardArray = databaseAccess.getCardsFromDatabase()

        print(cardArray)

    }

目前我只是将数组称为临时名称,因为我只是在测试数据库方法是否有效。我试过 NSMutableArray[Card]NSMutableArray(Card) 但都没有用。

我想这样做,以便我知道在进行数据库调用时我得到的是卡片对象数组,而不仅仅是一些随机数组。

谢谢

由于您正在编写 Swift 代码,因此您应该将 cardArray 声明为:

var cardArray: [Card] = []

而不是:

var cardArray: NSMutableArray<Card>!

因为getCardsFromDatabase() returns一个可变数组(不是Swift数组),你需要先向下转换它然后再分配给cardArray:

override func viewDidLoad() {
    super.viewDidLoad()

    let databaseAccess = DatabaseAccess()

    cardArray = databaseAccess.getCardsFromDatabase() as! [Card]

    print(cardArray)
}

如果你想声明一个类型为 array of Card 的变量但不想将数组保存到其中,你可以使用

var cardArray: [Card]

这相当于 Objective-C

NSMutableArray<Card*> cardArray;

(或者更确切地说,Objective-C 等同于 Swift,因为 Objective-C 采用类型化数组以与 Swift 兼容。)

如果你想定义一个类型为 array of Card 的变量并将一个空白数组放入其中,你可以使用

var cardArray = [Card]()

相当于

NSMutableArray<Card*> cardArray = [NSMutableArray new];

(尽管我忘记了您是如何满足 Objective-C 中的类型要求的。Objective-C 语句可能需要稍作调整...)