Массив NSLocalizedStrings в Swift

#ios #arrays #string #swift #nslocalizedstring

#iOS #массивы #строка #swift #nslocalizedstring

Вопрос:

Я пытаюсь преобразовать некоторый код в Swift, но натыкаюсь на некоторый код для добавления NSLocalizedString s в свойство массива. Я определил массив как массив String s. Я пытаюсь добавить объекты, используя = так же, как указано в документации, но я получаю сообщение об ошибке Could not find an overload for ' =' that accepts the supplied arguments .

Я уверен, что это простая ошибка, но я пробовал несколько разных комбинаций (добавление as String[] в конец или после имени переменной, добавление = [] к объявлению и т. Д.) И Не могу заставить его работать. Был бы признателен за некоторое объяснение того, что происходит.

 //Property:
var localizedTitles: String[]

//In init:
localizedTitles  = [NSLocalizedString("My String", tableName: nil, bundle: nil, value: "My String", comment: "")]
 

Комментарии:

1. NSLocalizedString() это функция, а не тип.

2. Спасибо, обновленный вопрос

Ответ №1:

Я вижу три проблемы / комментарии:

  1. По какой-то причине параметр пакета для NSLocalizedString не является необязательным. Вы должны предоставить ему фактический пакет.
  2. Вы должны инициализировать массив, прежде чем пытаться добавить к нему.
  3. Вы можете определить массив как массив строк, поскольку именно это возвращает NSLocalizedString .

Попробуйте это (я добавил несколько новых строк, чтобы сделать его более читаемым в этом формате):

 var localizedTitles : [String] = []
localizedTitles  = NSLocalizedString(
    "My String",
    tableName: nil,
    bundle: NSBundle.mainBundle(),
    value: "My String",
    comment: ""
    )
 

Но поскольку некоторые параметры имеют значения по умолчанию, вы можете просто сделать:

 var localizedTitles : [String] = []
localizedTitles  = NSLocalizedString("My String", value: "My String", comment: "")
 

Комментарии:

1. Это сделало свое дело. Интересно, в документах указано значение по умолчанию bundle , если оно не указано.

2. @Joey Ya, я думаю, это относится к тому факту, что параметры имеют параметры по умолчанию, поэтому вы можете просто исключить их из вызова. Я обновил свой ответ выше примером того, как просто их исключить.