所以我试图用我的sqlite数据库中的行填充一个对象,如下所示:
- (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)db
{
self.valueX = sqlite3_column_int(row, 0);
self.valueY = sqlite3_column_int(row, 1);
self.valueZ = sqlite3_column_int(row, 2);
//etc
return self;
}
由于在数据库迁移后添加了很多属性并且添加了更多属性,因此我尝试将其设置为智能助手并将代码更改为:
- (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)db
{
int i = 0;
self.valueX = sqlite3_column_int(row, i);
self.valueY = sqlite3_column_int(row, i++);
self.valueZ = sqlite3_column_int(row, i++);
//etc
return self;
}
然而,这不起作用,但如果我将其更改为sqlite3_column_int(row, i+=1);
,它似乎确实有效。
所以我的问题是:i++
和i += 1
之间有什么区别?
答案 0 :(得分:2)
我明白了!
似乎i++
首先返回i
的当前值,然后才将其加1。虽然i+=1
首先添加了数字,但只返回i
的值。因此,如果我只是将代码更改为此,则一切正常:
- (id) initWithSQLite:(sqlite3_stmt *)row andDatabase:(Database*)db
{
int i = 0;
//i++ instead of i, 0 is the returned value here and not 1 as I expected:
self.valueX = sqlite3_column_int(row, i++);
self.valueY = sqlite3_column_int(row, i++);
self.valueZ = sqlite3_column_int(row, i++);
//etc
return self;
}
我希望我能用这个来节省一些时间
答案 1 :(得分:2)
i += 1;
只是i = i + 1;
i++
称为后增量。它在表达式中返回i
的值,然后递增它。它的对应物是++i
,称为预增量。它在表达式中递增i
。
答案 2 :(得分:2)
i++
是后缀表示法,此处i
仅在语句执行后递增。
当i+=1
扩展为i = i+1
时,此处i
会在同一语句中递增。您也可以使用++i
前缀表示法来实现此目的。