首先,我對Swift非常陌生,所以在你解決我的問題之前記住Swift是一個容易解決的問題。Swift Variable Nil會導致致命錯誤:意外地發現零,同時展開一個可選值
我正在嘗試使用按鈕將文本字段的內容發送到表。這段代碼定義變量,你可以看到發件人:
import UIKit
var bookTitle:String!
class secondViewController: UIViewController {
@IBOutlet weak var titleField: UITextField!
@IBAction func addBook(sender: AnyObject) {
bookTitle = (titleField.text)!
}
這是我收到錯誤消息的代碼:
import UIKit
var cellContent = ["Book 1", "Book 2", "Book 3", "Book 4"]
class firstViewController: UIViewController, UITableViewDelegate {
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
cellContent.insert(bookTitle, atIndex: 0)
//THIS IS THE ERROR: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cellContent.count
}
從網上搜索,我認爲這個問題是變量「bookTitle」是零,但我不知道如何解決這個問題。
隨着'VAR BOOKTITLE:字符串'你做了你的變量的*隱含展開可選* (這是你想要搜索和閱讀的內容)。這意味着在任何情況下它都不能爲零。如果你從未使用過'addBook',那麼'bookTitle'就是零,所以當你嘗試使用它時,該應用會崩潰。 – Moritz
[我的答案在這裏](http://stackoverflow.com/a/36360605/2976878)可能有助於解釋如何正確處理optionals。從本質上講,你應該只使用隱式解包選項作爲最後的手段。如果你可以用一個默認值,一個懶惰變量或一個普通的可選項來使這個變量非可選 - 你應該這樣做。如果你毫無疑問地知道它在初始化之後總是會非零,並且在初始化之前永遠不會訪問它,那麼你只應該使用IUO。 – Hamish