Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用NSObject属性_Ios_Swift_Optional - Fatal编程技术网

Ios 如何使用NSObject属性

Ios 如何使用NSObject属性,ios,swift,optional,Ios,Swift,Optional,因此,我有一个名为Account的NSObject,其中包含一些变量。我在类中添加了getter和setter方法,但是当我尝试设置值并调用get时,得到的结果是nil import UIKit class Account: NSObject { var firstName: String = "" var lastName: String = "" //setters func setNameFirst(newName: String){

因此,我有一个名为
Account
NSObject
,其中包含一些变量。我在类中添加了getter和setter方法,但是当我尝试设置值并调用get时,得到的结果是nil

import UIKit


class Account: NSObject {

    var firstName: String = ""
    var lastName: String = ""


    //setters
    func setNameFirst(newName: String){
        firstName = newName
    }

    func setNameLast(newName: String){
       lastName = newName
    }

    //getters
    func getFirstName() -> String{
       return firstName
    }

    func getLastName() -> String{
       return lastName
    }

}
在另一个视图控制器中,我尝试设置并打印其中一个变量

import UIKit

var test: Account?

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        test?.setNameFirst("John")
        print(test?.getFirstName())
    }

}

但是当它打印时,我得到了
nil

您声明了
test
作为可选的
Account
——这就是
Account?
的含义

如果您从未将其初始化为任何值,它将保持
nil
并打印
nil

要纠正这一点,您需要添加(正如瓦卡瓦马在评论中所说):

现在,
test
将是
Account
的一个实例,而不是
nil

在操场上的其他示例:

let test : Account?
print(test) // won't run
但是

此外,您的getter和setter是多余的。

这样做:

let test = Account()
test.firstName = "First"
print(test.firstName) // prints "First\n"
同:

let test = Account()
test.setNameFirst("First")
print(test.getFirstName()) // prints "First\n"

您从未创建过
帐户
对象。您需要在某个时候执行
test=Account()
。您不应该手动添加setter和getter。您可以通过执行
test?.firstName=“John”
print(test.firstName)
来获取/设置属性。这就是原因!非常感谢
let test = Account()
test.firstName = "First"
print(test.firstName) // prints "First\n"
let test = Account()
test.setNameFirst("First")
print(test.getFirstName()) // prints "First\n"