3

我目前是 Swift 的新手,但我是一个 Objective-C 框架的维护者,它是一个 C 库的包装器,我希望为它提供最好的 API。

我正在看这种代码

/// The index checksum
@property (nonatomic, readonly, strong) GTOID * _Nullable checksum;

并想知道nullable注释是否合理。查看底层 C 函数

const git_oid *git_index_checksum(git_index *index)
{
    return &index->checksum;
}

很明显,Obj-C 包装器中的模内存分配失败,

- (GTOID *)checksum {
    const git_oid *oid = git_index_checksum(self.git_index);
    if (oid != NULL) {
        return [GTOID oidWithGitOid:oid];
    }
    return nil;
}

这是不可为空的。

或者是吗?

在桥接时,特别是在面对分配失败时,是否有一些具体的指导方针可以被认为是可接受的 wrt 可空性?如果我使该属性nonnull和内存失败,斯威夫特的反应会有所不同吗?

4

0 回答 0