Как использовать Objective-C #define от Swift



Я мигрирую a UIViewController класс, чтобы немного потренироваться со Свифтом. Я успешно использую код Objective-C через заголовок моста, но у меня есть необходимость импортировать файл констант, который содержит #define директивы.



Я видел в использование Swift с какао и Objective-C (простые макросы) следующие:




Простые Макросы



где вы обычно использовали #define директива для определения примитива константа в C и Objective-C, в Swift вместо этого используется глобальная константа. Например, определение константы #define FADE_ANIMATION_DURATION 0.35 можно лучше выразить в Swift с let FADE_ANIMATION_DURATION = 0.35. Поскольку простые константные макросы напрямую сопоставляются с глобальными переменными Swift, компилятор автоматически импортирует простые макросы, определенные в исходных файлах C и Objective-C.




так что, кажется, это возможно. Я импортировал файл, содержащий мои константы в заголовок моста, но у меня нет видимости из мой .swift файл, не может быть решена.



что я должен сделать, чтобы мои константы были видны Swift?



обновление:



это, кажется, работает с NSString константы, но не с логическими значениями:



#define kSTRING_CONSTANT @"a_string_constant" // resolved from swift
#define kBOOL_CONSTANT YES // unresolved from swift
570   5  

5 ответов:

на данный момент, какой #defineпревращаются, а некоторые нет. Более конкретно:

#define A 1

...становится:

var A: CInt { get }

или:

#define B @"b"

...становится:

var B: String { get }

к сожалению, YES и NO не распознаются и не преобразуются на лету компилятором Swift.

я предлагаю вам превратить вашу #define s к фактическим константам, что лучше, чем #defines в любом случае.

.h:

extern NSString* const kSTRING_CONSTANT;
extern const BOOL kBOOL_CONSTANT;

NSString* const kSTRING_CONSTANT = @"a_string_constant";
const BOOL kBOOL_CONSTANT = YES;

и тогда Свифт увидите:

var kSTRING_CONSTANT: NSString!
var kBOOL_CONSTANT: ObjCBool

другой вариант-изменить ваш BOOL определяет

#define kBOOL_CONSTANT 1

быстрее. Но не так хорошо, как фактические константы.

просто быстрое разъяснение по нескольким вещам сверху.

Swift константы выражаются с помощью ключевого словаlet

Например:

    let kStringConstant:String = "a_string_constant"

кроме того, только в определении протокола можно использовать { get}, например:

    protocol MyExampleProtocol {
        var B:String { get }
    }

в swift вы можете объявить перечисление, переменную или функцию вне любого класса или функции, и она будет доступна во всех ваших классах (глобально)(без необходимости импортировать определенный файл).

  import Foundation
  import MapKit

 let kStringConstant:String = "monitoredRegions"

  class UserLocationData : NSObject {    
class func getAllMonitoredRegions()->[String]{
     defaults.dictionaryForKey(kStringConstant)
 }

альтернативой для макроса может быть глобальная переменная . Мы можем объявить глобальную переменную вне класса и получить доступ к ним без использования класса. Пожалуйста, найдите пример ниже

импорт фундамент пусть BASE_URL = "www.google.com"

класс тест {

}

простой язык swift не требует макросов все #define директивы. будем пускать и сложные макросы должны преобразовываться в func

Comments

    Ничего не найдено.