我正在使用textViewDidChange中的字数统计功能。一旦我键入它崩溃。当我粘贴一个句子时,调试器显示它正在获取单词计数,但是当将计数添加到按钮标题时出现致命错误时崩溃:在展开可选值时意外地发现nil。
func textViewDidChange(textView: UITextView) {
let wordCount = textView.text.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).count
let words = String(format: "%d", wordCount)
countButton.title = "\(words)"
}
答案 0 :(得分:0)
确保countButton
不是nil
(检查插座连接)。
此外,字符串插值中的变量count
似乎没有被定义 - 可能是仍然是nil
的ivar?
修改强>:
事实证明,您的countButton
实际上是nil
并以编程方式创建。我怀疑这样的定义:
weak var countButton : UIButton!
以及像这样的初始化:
self.countButton = UIButton()
问题是,weak
修饰符告诉系统不保留对象的所有权。因此,它会在创建后立即解除分配。
请改为尝试:
let button = UIButton()
self.view?.addSubview(button)
self.countButton = button
答案 1 :(得分:0)
变量wordCount也有一个警告说它从未变异,考虑将其更改为let。我认为var是自计数改变以来的方式
计数可能会改变。但变量wordCount
的值将从不更改,至少在您显示的代码中。你创造它的唯一一件事就是打印它。因此,它应该是let
变量,正如编译器所建议的那样。