Swift Variable Nil导致致命错误:在展开Optional值时意外发现nil

时间:2016-04-20 21:18:25

标签: swift null

首先,我对Swift非常陌生,所以在你回答我的问题之前要牢记这一点,因为这是一个容易解决的问题。

我正在尝试使用按钮将文本字段的内容发送到表格。这段代码定义了变量,你可以看到发件人:

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”是零,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

这是因为你的

var bookTitle:String!

因为您在设置之前正在访问它。您可以使用didSet检查它。

var bookTitle: String! {
   didSet {
      print("did set called")
   }
}

您应该使用此声明:

var bookTitle: String?

它更加安全,因为您在访问变量时必须解开变量。您应该阅读有关可选和显式类型的Swift文档章节。

供参考:

  

因为隐式展开的可选项的值在您使用时会自动解包,所以不需要使用!操作员打开它。也就是说,如果您尝试使用值为nil的隐式解包的可选项,则会出现运行时错误。

请参阅:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-ID445

章:隐式解包可选类型