#xcode #plist #uistoryboardsegue #xcode-storyboard
#xcode #plist #uistoryboardsegue #xcode-раскадровка
Вопрос:
Я обнаружил, что мне приходится дважды объявлять одно и то же строковое значение для идентификаторов перехода:
- Один раз в коде для обработки логики перехода в моих заглушках prepare ()
- Один раз в инспекторе, чтобы установить идентификаторы перехода в раскадровке
Очевидно, что это открывает много потенциальных проблем с опечатками, а что нет между двумя строковыми значениями.
Что я хотел бы сделать, если это возможно, это определить мои идентификаторы перехода один раз в файле plist, а затем дважды ссылаться на одно и то же определение в двух местах, перечисленных выше. Конечно, я знаю, что в Swift можно ссылаться на значение plist, но возможно ли это в инспекторе атрибутов раскадровки?
Ответ №1:
Я не думаю, что это возможно, но у меня есть две альтернативы для вас:
-
Используйте что-то вроде R.swift. Этот инструмент проанализирует вашу раскадровку и создаст константы, которые вы можете использовать в коде
-
Вместо того, чтобы идентифицировать переход по его идентификатору, сделайте это с помощью его целевого контроллера.
Пример:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let controller = segue.destination as? MyViewController {
controller.value = self.value
}
}
Лично я использую номер 2, я очень, очень редко читаю свойство name для segue
Комментарии:
1. Спасибо, ваше второе предложение звучит как лучший путь вперед. Однако мне это кажется небольшим упущением со стороны Apple.
2. Этот API был создан в Objective-C, который имеет менее строгую проверку типов, поэтому сравнение строк имело больше смысла. Вы также можете использовать его для различения двух переходов для просмотра контроллеров с одним и тем же классом, но с разными действиями или чем-то еще.