我有一些來自庫供應商的定義的 C 頭檔案。定義看起來像:
#define TEST_DEFINE_1 0x12340000
#define TEST_DEFINE_2 TEST_DEFINE_1
#define TEST_USE_DEFINE_1 (TEST_DEFINE_1| 0x0001)
#define TEST_USE_DEFINE_2 (TEST_DEFINE_2| 0x0001)
我想在我的快速代碼中使用這些定義,所以我添加了橋接頭:
#ifndef Bridging_Header_h
#define Bridging_Header_h
#include "defines.h"
#endif /* Bridging_Header_h */
并使用它們:
print(TEST_DEFINE_1)
print(TEST_DEFINE_2)
print(TEST_USE_DEFINE_1)
// This line causes error "Cannot find 'TEST_USE_DEFINE_2' in scope"
print(TEST_USE_DEFINE_2)
所以我不能使用帶有算術的嵌套定義。
swift / xcode有問題嗎?還是我做錯了?
有最小示例的回購:https ://github.com/aatriff/define_test
uj5u.com熱心網友回復:
查看此檔案以了解如何在 Swift 中使用 C 宏。
以下是相關部分:
Swift 自動匯入簡單的、類似常量的宏,用#define 指令宣告,作為全域常量。宏在對字串、浮點數或整數值使用文字時,或者在文字或先前定義的宏之間使用 、-、> 和 == 等運算子時,會被匯入。
比簡單的常量定義更復雜的 C 宏在 Swift 中沒有對應物。您在 C 和 Objective-C 中使用復雜的宏來避免型別檢查約束或避免重新輸入大量樣板代碼。但是,宏會使除錯和重構變得困難。在 Swift 中,您可以使用函式和泛型來獲得相同的結果,而不會做出任何妥協。
編輯
這是我以前使用過的解決方法:
在 Bridging_Header.h 添加一個包裝函式
int exposeTestUseDefine2()
{
return TEST_USE_DEFINE_2;
}
main.swift
print(exposeTestUseDefine2())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427811.html
上一篇:Xcode,iOS應用程式-如何禁用iPad和Mac兼容性?
下一篇:影片兩點之間的線-迅速
