我在C LibSass库周围编写了一个Swift包装器,并且在将非空字符串传递给C方法时遇到了一些麻烦。
LibSass库提供了一种设置自定义缩进值的方法。因为这个方法需要一个const char*
我知道我可以将我的Swift String传递给这个方法,Swift会转换它。因为它是缩进,所以这个String只包含空格或\t
,但是当我检查缩进的getter值时,我只收到一个空字符串。我按如下方式测试这个值:
XCTAssertEqual( sassOptions.indent, "\t" )
sassOptions.indent
返回应设置的缩进。
缩进属性设置为func setIndent(_: String)
,调用以下LibSass方法:
void sass_option_set_indent(struct Sass_Options* options, const char* indent)
预期的options
参数存储为内部属性,并提供给setIndent(_:String)
Swift函数内的C方法。
我使用Homebrew(brew install --HEAD libsass
)安装了LibSass库,并将库链接到具有this依赖项的项目。其他一切都按照我的预期运作。
有人知道Swift是否将一个只包含空格的String转换为空字符串以及如何避免这种行为?
我的setIndent函数:
public func setIndent( _ indent: String ) {
sass_option_set_indent( self.options, indent )
}
另请参阅GitHub repository了解整个代码和测试。