Как использовать Typealias или Closure, чтобы определить константу с параметром для имени в swift? - PullRequest
1 голос
/ 03 июля 2019

В Objective C я использовал определение констант, используя #defines, как способ быстрого и явного определения строк для локализации и поддержания немного более чистого кода.

Например:

#define DefineStringKey(x) static NSString *const x = @#x

Это позволило бы мне определить константы, имена которых совпадают со строкой поэтому DefineStringKey(@"IntroTitle"); создаст константу с именем IntroTitle со значением IntroTitle , к которой я мог бы обратиться в своем коде (автозаполнение и все).

У меня была идея, что я мог бы сделать то же самое в Swift, но я не могу получить правильный синтаксис, используя typealias или замыкания.

Тип Псевдоним

typealias DefineStringKey:(x:String) = let x:String = x 

Закрытие

let DefineStringKey:(String) = (String) -> () {
   (x:String) in
   let x:(String) = x
}

Ясно, что оба приведенных мною примера неверны. Это то, что я могу сделать в Swift с помощью другого метода или мой синтаксис просто выключен.

Отредактировано для добавления варианта использования.

1 Ответ

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

К сожалению, Swift не имеет макросов, поэтому вы не можете определить константу (или переменную) без записи let myConstant = .... Что вы можете сделать, так это использовать замыкание для определения константы, которую вы можете использовать во внутренней области замыкания:

func defineStringKey(_ key: String, handler: (String) -> Void) {
    handler(key)
}

Поместите это в любое место в глобальной области видимости, и вы можете использовать его следующим образом:

defineStringKey("IntroTitle") { IntroTitle in
    print(IntroTitle)
}

Это распечатывает IntroTitle. Это не очень полезно, хотя, и я не рекомендую использовать его. В swift вы должны явно ввести определения переменных.

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