2015-01-27 3 views
0

ого я вам скажу почему:HTHorizontalSelectionList неожиданно нашел ноль в то время как разворачивание необязательного значения

Я использую следующий стручок: HTHorizontalSelectionList

Если я объявляю это так:

class RightViewController: UIViewController, HTHorizontalSelectionListDelegate, HTHorizontalSelectionListDataSource { 

    var selectionList: HTHorizontalSelectionList! 
} 

я получаю следующую ошибку компиляции:

ld: warning: directory not found for option '-FTest' 
Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$_HTHorizontalSelectionList", referenced from: 
     __TMaCSo25HTHorizontalSelectionList in RightViewController.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

H ээ !? Что!?

Если я вместо этого реализую его, то он компилируется отлично!

override func viewDidLoad() { 
    super.viewDidLoad() 

    var selectionList: HTHorizontalSelectionList! 
    selectionList?.frame = CGRectMake(0, 0, self.view.frame.size.width, 40) 
    selectionList?.delegate = self 
    selectionList?.dataSource = self 
    self.view.addSubview(selectionList) 
} 

... за исключением, конечно, я получаю сообщение об ошибке на addSubview линии:

fatal error: unexpectedly found nil while unwrapping an Optional value 

Я нахожу это невероятно трудно понять, как Swift работает, когда я получаю вещи, как это происходит довольно довольно часто.

ответ

1

я найти его невероятно трудно понять, как Swift работает, когда я получаю вещи, как это происходит довольно часто

Там нет ничего сложного об этом. Вы начинаете с вашей необязательной переменной, установленной в nil. Он остается nil. В конце концов, вы пытаетесь разворачивать nil, а затем вы аварии, потому что вы не можете сделать это:

var selectionList: HTHorizontalSelectionList! // it is nil 
selectionList?.frame = CGRectMake(0, 0, self.view.frame.size.width, 40) // still nil, nothing happens 
selectionList?.delegate = self // still nil, nothing happens 
selectionList?.dataSource = self // still nil, nothing happens 
self.view.addSubview(selectionList) // unwrap, crash 

Если вы не хотите, чтобы врезаться, присвоить selectionList фактическое значение, отличное от nil, как, может быть реальной HTHorizontalSelectionList.

+0

О, я вижу! Однако выполнение чего-то вроде 'selectionList = HTHorizontalSelectionList()' не компилируется и не дает мне эту исходную ошибку. – fuzz

+0

Хорошо, тогда вам нужно сосредоточиться на этом; это совсем другое, это ошибка компоновщика. Я ответил на вопрос кода. :) – matt

+0

Что вы имеете в виду, если присвоить 'selectionList' фактическое значение? – fuzz

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

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