为什么我的字符串值为零?

时间:2016-07-04 03:17:26

标签: swift string uiviewcontroller

基本上我试图制作一个简单的笔记应用程序,在这里我只是试图显示标题和内容。

项目(备注)文件

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?

3 个答案:

答案 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()
}

如果您不需要将您的属性作为可选项,请在声明时初始化变量,或者在类的构造函数中(在适用的位置)执行此操作,并避免隐式解包您的选项可能会导致运行时错误。

希望这有帮助!