基本上我试图制作一个简单的笔记应用程序,在这里我只是试图显示标题和内容。
项目(备注)文件
import Foundation
class Project
{
var title = " "
var content = " "
var after = " "
}
注意详细视图控制器文件
class NoteDetailViewController: UIViewController
{
var project: Project!
@IBOutlet weak var titleTextField: UITextField!
@IBOutlet weak var contentTextField: UITextView!
@IBOutlet weak var afterTextField: UITextView!
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
titleTextField.text = project.title
contentTextField.text = project.content
afterTextField.text = project.after
contentTextField.sizeToFit()
afterTextField.sizeToFit()
}
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
project.title = titleTextField.text!
project.content = contentTextField.text!
}
}
当我引用任何项目时。文件,我没有。我不知道为什么我从字符串中得到nil?
答案 0 :(得分:3)
您需要正确初始化“Project”类。
let project = Project()
答案 1 :(得分:2)
在我看来project
未初始化;
project = new Project()
因此访问其属性最终将返回nil,因为该对象不存在
答案 2 :(得分:1)
是的,初始化该属性肯定会解决问题,但是抛出错误背后的原因,并且它值得理解,而不是仅仅初始化属性以使错误消失。
当您将您的财产声明为:
时var project: Project! //- with a !
您声明可选属性立即获得解包(Implicit Unwrapping),这意味着编译器希望您处理属性所在的情况nil,当你使用属性时它不会抛出编译错误(因为它已被解包)。这是不理想的,因为Swift旨在尝试在编译时捕获尽可能多的错误,而不是在运行时,并且当您声明它时解开您的可选项,您错过了所有这些优点。
在你的每一天,你都会声明可选属性:
var project: Project?
如果尝试在不解包的情况下访问属性值,那么会抛出编译时错误。例如,当做:
var project: Project?
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
titleTextField.text = project.title //- The compiler will scream at you here.
contentTextField.text = project.content
afterTextField.text = project.after
contentTextField.sizeToFit()
afterTextField.sizeToFit()
}
如果您不需要将您的属性作为可选项,请在声明时初始化变量,或者在类的构造函数中(在适用的位置)执行此操作,并避免隐式解包您的选项可能会导致运行时错误。
希望这有帮助!