2

我第一次在 iOS 上使用 sqlite3 .. 在我必须使用该 sqlite3_open(const char *filename, sqlite3 **ppDb)函数打开与数据库的连接的部分。我正在浏览以下代码片段:

    int err = sqlite3_open((databasePath ? [databasePath fileSystemRepresentation] : ":memory:"), &db );
    if(err != SQLITE_OK) {
        NSLog(@"error opening!: %d", err);
        return NO;
    }

什么是?:memory:.. 在这里,databasePath是一个NSString包含数据库路径并且db是一个实例sqlite3

4

2 回答 2

2

?:是三元运算符,解释here

在这种特殊情况下,它是一种快捷的写作方式:

int err;
if (databasePath) 
    err = sqlite3_open([databasePath fileSystemRepresentation], &db);
else
    err = sqlite3_open(":memory:", &db);
if (err != SQLITE_OK) {

但是,我相信你会同意,更简洁。

于 2013-08-01T06:24:30.177 回答
0

?其次:是所谓的“三元算子”。

这条线的(databasePath ? [databasePath fileSystemRepresentation] : ":memory:")意思是:

如果databasePath为真,则使用[databasePath fileSystemRepresentation],否则使用":memory:"

该行是以下内容的单行版本:

if(databasePath) {
  return [databasePath fileSystemRepresentation];
} else {
  return ":memory:";
}

:memory:是内存数据库。有关更多信息,请参阅文档

于 2013-08-01T06:15:20.490 回答