首先,我对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”是零,但我不知道如何解决这个问题。
答案 0 :(得分:1)
这是因为你的
var bookTitle:String!
因为您在设置之前正在访问它。您可以使用didSet检查它。
var bookTitle: String! {
didSet {
print("did set called")
}
}
您应该使用此声明:
var bookTitle: String?
它更加安全,因为您在访问变量时必须解开变量。您应该阅读有关可选和显式类型的Swift文档章节。
供参考:
因为隐式展开的可选项的值在您使用时会自动解包,所以不需要使用!操作员打开它。也就是说,如果您尝试使用值为nil的隐式解包的可选项,则会出现运行时错误。
章:隐式解包可选类型