如何将libjpeg复杂宏与Swift一起使用?
当我尝试调用libjpeg的如何将libjpeg复杂宏与Swift一起使用?,swift,c-preprocessor,libjpeg,Swift,C Preprocessor,Libjpeg,当我尝试调用libjpeg的jpeg\u create\u decompress()函数时,我得到 /usr/include/x86_64-linux-gnu/jconfig.h:8:34: error: invalid suffix '.0' on floating constant #define LIBJPEG_TURBO_VERSION 1.5.0 ^ .../main.swift:49:5: error: use of unre
jpeg\u create\u decompress()
函数时,我得到
/usr/include/x86_64-linux-gnu/jconfig.h:8:34: error: invalid suffix '.0' on floating constant
#define LIBJPEG_TURBO_VERSION 1.5.0
^
.../main.swift:49:5: error: use of unresolved identifier 'jpeg_create_decompress'
jpeg_create_decompress(&info)
^~~~~~~~~~~~~~~~~~~~~~
CJPEG.jpeg_CreateDecompress:1:13: note: did you mean 'jpeg_CreateDecompress'?
public func jpeg_CreateDecompress(_ cinfo: j_decompress_ptr!, _ version: Int32, _ structsize: Int)
^
<unknown>:0: error: build had 1 command failures
jpeg\u create\u decompresse
不可用,可能如以下所述:
复杂宏在C和Objective-C中使用,但在Swift中没有对应的宏。复杂宏是不定义常量的宏,包括括号内的函数式宏。在C和Objective-C中使用复杂的宏以避免类型检查约束或避免重新键入大量样板代码。然而,宏会使调试和重构变得困难。在Swift中,您可以使用函数和泛型来实现相同的结果,而不会有任何妥协。因此,Swift代码无法使用C和Objective-C源文件中的复杂宏
但是如果没有这个宏,我如何将
libjpeg
与Swift一起使用?我看不到在Swift中重新定义它们的方法,例如:
class JPEGLibWrapper {
class func jpeg_create_decompress(cinfo: j_decompress_ptr) {
jpeg_CreateDecompress(cinfo, JPEG_LIB_VERSION, MemoryLayout<jpeg_decompress_struct>.size)
}
}
(可以使用更好的命名…)
编辑我刚注意到你在Linux上使用Swift,对吗?我不知道如何在Linux上实现Swift–C桥接,但我想可以在C文件中实现类似于Objective-C代码的功能
与在Swift中声明Objective-C或C方法/函数相比,声明Objective-C或C方法/函数的优势在于,在前者中,您实际上使用的是复杂的宏,因此避免了(错误地)转换它。您只需在其周围声明一个包装器方法/函数,并将其公开给Swift即可
资料来源:
class JPEGLibWrapper {
class func jpeg_create_decompress(cinfo: j_decompress_ptr) {
jpeg_CreateDecompress(cinfo, JPEG_LIB_VERSION, MemoryLayout<jpeg_decompress_struct>.size)
}
}
(可以使用更好的命名…)
编辑我刚注意到你在Linux上使用Swift,对吗?我不知道如何在Linux上实现Swift–C桥接,但我想可以在C文件中实现类似于Objective-C代码的功能
与在Swift中声明Objective-C或C方法/函数相比,声明Objective-C或C方法/函数的优势在于,在前者中,您实际上使用的是复杂的宏,因此避免了(错误地)转换它。您只需在其周围声明一个包装器方法/函数,并将其公开给Swift即可
资料来源: