2015-06-27 6 views
1

Я пытаюсь создать кнопку программно и добавить ее в UIScrollView в Swift. Код ниже - это то, что я использую, и бросает печально известную «разворачивающуюся дополнительную ошибку», где я добавляю кнопку в качестве подсмотра. Почему он это делает? Я проверил и сравнил свой код с другими, и все, кажется, выглядят хорошо.Неожиданно найдено нуль при распаковке необязательного значения (UIButton)

let button = UIButton.buttonWithType(UIButtonType.System) as UIButton 
button.frame = CGRectMake(8, 2, 200, 300) 
button.backgroundColor = UIColor.grayColor() 
button.setTitle(productName, forState: UIControlState.Normal) 
self.productButtonView.addSubview(button) //This line throws error 

Заранее спасибо.

ответ

1

The as! Operator - developer.apple.com/swift/blog

Swift 1.2 separates the notions of guaranteed conversion and forced conversion into two distinct operators. Guaranteed conversion is still performed with the as operator, but forced conversion now uses the as! ... It may be easiest to remember the pattern for these operators in Swift as: ! implies “this might trap,” while ? indicates “this might be nil.”

Swift 2 версии (Xcode7 бета-2) (в качестве!):

let button = UIButton(type: .System) as UIButton 
// see that the way we do this has changed 

button.frame = CGRectMake(8, 2, 200, 300) 
button.backgroundColor = UIColor.grayColor() 
button.setTitle(productName, forState: UIControlState.Normal) 
self.productButtonView.addSubview(button) 

Swift 1.2 версии (Xcode 6.3 .2):

let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton 

button.frame = CGRectMake(8, 2, 200, 300) 
button.backgroundColor = UIColor.grayColor() 
button.setTitle(productName, forState: UIControlState.Normal) 
self.productButtonView.addSubview(button) 
+0

Теперь, когда я могу писать в многострочных сетях с XCode 6.3.2, я понял, что это был мой« productButtonView », который был нулевым. Ваш ответ правильный, спасибо. Возможно, это шаги за пределами граница этой темы, но я нужно сделать больше, чем просто создать UIScrollView (в раскадровке) и подключить его к розетке, чтобы использовать его? – Tice

+0

Теоретически то, что вы описываете, должно работать. Поэтому я не знаю, что предложить. Предполагая, что 'productButtonView' определенно является подзадачей' self' в этом контексте и что '@ IBOutlet' определенно правильно подключен. Возможно, стоит начать новый вопрос и опубликовать весь код контроллера просмотра + описание проблемы, чтобы узнать, сможет ли кто-нибудь решить, почему вы получаете 'nil'. – simons

+1

Разработал это, он почему-то не был связан - глупо меня. Во всяком случае, спасибо. – Tice

0

Попытка фиксации первой линии

let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton 
+0

Это вызывает ошибку: «ожидаемый тип после« как ». :( – Tice

+0

Какую версию Xcode вы используете? Если вы используете более старую, то пишите как? Я верю. Я использую Версию 6.3.2, и я получаю ошибку, если я пишу «как». Это должно быть либо «как!» или «как?». –

+0

Я использую XCode версию 6.1.1. Я пробовал писать «как?», но это заставило меня написать «!» после каждого использования переменной «button» и в итоге так же, как и в любом случае. Переход к 6.3.2. – Tice

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

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