2014-12-30 4 views
0

Я изучаю Swift, но у меня есть две «глупые» проблемы.UILabel AutoResize Swift

первого, я хотел бы Autosize моего UILabel Во-вторых, у меня есть еще один UILabel, и я хочу поставить имя и фамилию в этом поле

Я попытался с

@IBOutlet weak var title: UILabel! 

title.text = currentPerson?.name+""+currentPerson?.surname 

Но у меня есть эта ошибка

Значение дополнительного типа 'String?' не разворачивается; вы имели в виду использовать "!" или "?" ?

ответ

2

Обычно рекомендуется задать 1 вопрос за пост, так что вы получите четкие ответы & не смешивать темы, но ...

  1. В XCode раскадровки «Атрибуты Инспектор» вы можете изменить «Autoshrink» от «Fixed Font Size» до минимального размера шрифта или масштаба. Также измените «Линии» по умолчанию от 1 до 0. Вам также необходимо установить некоторые ограничения AutoLayout, чтобы привязать метку к супервизу или другим элементам таким образом, чтобы они могли масштабироваться. Не могу сказать больше без просмотра раскадровки.

  2. Используя необязательную цепочку для установки текста метки, вы пытаетесь установить свойство метки .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, ваше приложение будет разбиваться здесь.

Также обратите внимание, что вы можете объединить с помощью + и " " или с интерполяцией строк.

+0

Спасибо за ответ, строки являются concat. О моей первой проблеме. Я модифицировал Autoshrink с минимальным шрифтом Scale, я добавил ограничения, даже ограничения Bottom. Мой ярлык находится под моим «BottomNavigationBar». Могу ли я использовать Playground с моим StoryBoard, или мне нужно каждый раз создавать? – monkeyUser

Смежные вопросы