所以我试图用来自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有什么区别?

最佳答案

我想到了!
看来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;
}


我希望我可以为此节省一些时间

关于ios - int plus plus与int plus之间的差等于1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20398458/

10-12 14:46