используйте #define в цели C и доступ в классе swift - PullRequest
0 голосов
/ 04 июля 2018

Я определил #define baseUrl [NSString stringWithFormat:@"%@api/v4", MAINURL] в классе цели c и могу получить доступ в любом месте проекта. Но теперь я создал файл swift при выходе из проекта target c и хочу получить доступ к baseurl в swift, но получена ошибка.

Use of unresolved identifier 'baseUrl'

как можно решить?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Импорт макросов Objective-C в Swift не всегда работает. Согласно документации :

Swift автоматически импортирует простые, похожие на константы макросы, объявленные с помощью директивы #define, в качестве глобальных констант. Макросы импортируются, когда они используют литералы для строковых, плавающих или целочисленных значений или используют операторы, такие как +, -,> и ==, между литералами или ранее определенными макросами.

Макросы C, более сложные, чем простые определения констант, не имеют аналога в Swift.

Альтернативой в вашем случае было бы использование функции, которая возвращает значение, определенное макросом

// .h file
#define baseUrl [NSString stringWithFormat:@"%@api/v4", MAINURL]
+ (NSString*) BaseUrl;

// .m file
+ (NSString*) BaseUrl { return baseUrl }
0 голосов
/ 04 июля 2018

К сожалению, Objective-C #define не может получить доступ с помощью swift.

Может быть, вы измените #defines на фактические константы, что лучше, чем #defines.

Или создать быстрый объект, содержащий некоторую статическую переменную.

Например:

class API: NSObject {
    static let apiPrefix = "https://vvv"
    static let apiPosts = apiPrefix + "posts"
}

Вызов: API.apiPosts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...