Как создать необязательные параметры в структуре Swift

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

Если имя значка передано в качестве параметра, оно загрузится, иначе — нет.

Я получаю ошибку Value of optional type 'String?' must be unwrapped to refer to member 'isEmpty' of wrapped base type 'String', которую я не понимаю.

Кроме того, когда я инициализирую структуру, ей по-прежнему требуются параметры, несмотря на необязательный? индикатор. Как создать необязательные параметры в структуре Swift

Включайте код, а не изображения кода, который нельзя копировать/вставлять, искать или читать с помощью программ чтения с экрана.

jnpdx 05.04.2022 22:41

попробуйте if preIcon != nil ... или if let icon = preIcon

ChrisR 05.04.2022 22:42

Существует несколько способов: необязательная привязка (if let), явный метод init со значениями параметров по умолчанию или необязательные variables со значениями пустой строки по умолчанию, которые указывают нет изображения. Просто вызвать isEmpty по желанию невозможно.

vadian 05.04.2022 22:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Измените оператор if на этот

if preIcon?.isEmpty == false

Затем измените

var preIcon: String?

var postIcon: String?

Это устранило ошибку Value of optional type 'String?' must be unwrapped to refer to member 'isEmpty' of wrapped base type 'String'. Все еще получаю Missing arguments for parameters 'preIcon', 'postIcon' in call, когда пытаюсь инициализировать структуру.`

dp38922 05.04.2022 23:08

Изменено let на var для этих двух переменных. Проверьте обновление.

Biclops 05.04.2022 23:16

Это сделало это. Знаете ли вы, почему использование «let» не позволяет параметру быть необязательным?

dp38922 05.04.2022 23:25

Если установлено значение let, то оно должно быть установлено при инициализации. И изменить нельзя. Давайте для констант, var для переменных.

Biclops 07.04.2022 00:43

Ах, в то время, когда конкретный экземпляр этой структуры (также известный как причудливый класс) создается (также известный как инициализация), константы должны иметь присвоенное им значение. Это имеет смысл. Приходит из мира .JS и новичок в Swift. Спасибо вам за помощь.

dp38922 07.04.2022 13:34

Поскольку preIcon является необязательным, вам необходимо развернуть его, прежде чем вы сможете получить доступ к его свойствам. Итак, ваша строка должна быть:

if let preIcon = preIcon, !preIcon.isEmpty {

Вы можете узнать больше о необязательной привязке (использованный выше синтаксис if let) по адресу: https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html.


С точки зрения struct требующих свойств, помеченных как необязательные, хотя Xcode может включать необязательные свойства в автозаполнение, на самом деле он не требует, чтобы вы включали для них значения - их можно удалить, а ваш инициализатор все равно будет работать.

Другие вопросы по теме