我目前是 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
和内存失败,斯威夫特的反应会有所不同吗?