我有一段代码,我已经在一个客观的应用程序中使用,我希望将其整合到一个新的快速项目中。问题是我无法解决语法问题!
我使用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)
,但都没有效果。
我想这样做,以便我知道在进行数据库调用时我得到的是一组卡对象,而不仅仅是一些随机数组。
由于
答案 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)
}