Обычно рекомендуется задать 1 вопрос за пост, так что вы получите четкие ответы & не смешивать темы, но ...
В XCode раскадровки «Атрибуты Инспектор» вы можете изменить «Autoshrink» от «Fixed Font Size» до минимального размера шрифта или масштаба. Также измените «Линии» по умолчанию от 1 до 0. Вам также необходимо установить некоторые ограничения AutoLayout, чтобы привязать метку к супервизу или другим элементам таким образом, чтобы они могли масштабироваться. Не могу сказать больше без просмотра раскадровки.
Используя необязательную цепочку для установки текста метки, вы пытаетесь установить свойство метки .text
на дополнительный тип String?
вместо String
. Это не эквивалентно. Необязательный тип String?
может содержать, или он может быть равен нулю. UILabel ожидает, что вы используете экземпляр String
, поэтому он жалуется на несоответствие.
Один подход заключается в четком проверить необязательное значение против nil
:
if currentPerson != nil {
title.text = "\(currentPerson.name) \(currentPerson.surname)"
}
else {
title.text = ""
}
Свифта опция связывания похож на первый вариант, но создать временную константу и может ссылаться на его свойства. Если currentPerson
не nil
, то выполняется блок if
.
// current convention would be to use "currentPerson" on both sides, which can be confusing. The left side is a temporary constant & the right side is the optional property you've declared somewhere above
if let aPerson = currentPerson {
title.text = "\(aPerson.name) \(aPerson.surname)"
}
else {
title.text = ""
}
Кроме того, как следует из сообщения об ошибке, вы можете Force разворачивать необязательное значение для доступа к свойствам имя:
title.text = currentPerson!.name + " " + currentPerson!.surname
Это предполагает, что currentPerson
никогда не равна нулю. Если это is nil, ваше приложение будет разбиваться здесь.
Также обратите внимание, что вы можете объединить с помощью +
и " "
или с интерполяцией строк.
Спасибо за ответ, строки являются concat. О моей первой проблеме. Я модифицировал Autoshrink с минимальным шрифтом Scale, я добавил ограничения, даже ограничения Bottom. Мой ярлык находится под моим «BottomNavigationBar». Могу ли я использовать Playground с моим StoryBoard, или мне нужно каждый раз создавать? – monkeyUser