Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将libjpeg复杂宏与Swift一起使用?_Swift_C Preprocessor_Libjpeg - Fatal编程技术网

如何将libjpeg复杂宏与Swift一起使用?

如何将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

当我尝试调用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 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即可

资料来源:


我看不到用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即可

资料来源: