声明NSMutableArray内容类型

时间:2018-01-05 22:32:25

标签: objective-c arrays swift nsmutablearray

我有一段代码,我已经在一个客观的应用程序中使用,我希望将其整合到一个新的快速项目中。问题是我无法解决语法问题!

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

我会在目标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),但都没有效果。

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

由于

2 个答案:

答案 0 :(得分:2)

如果要声明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语句可能需要稍微调整......)

答案 1 :(得分:1)

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

var cardArray: [Card] = []

而不是:

var cardArray: NSMutableArray<Card>!

因为getCardsFromDatabase()返回一个可变数组(而不是Swift数组),所以在将其分配给cardArray之前,需要先将其向下转换:

override func viewDidLoad() {
    super.viewDidLoad()

    let databaseAccess = DatabaseAccess()

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

    print(cardArray)
}