所以我有一个名为NSObject
的{{1}},其中包含一些变量。我在类中添加了getter和setter方法,但是当我尝试设置值并调用它们时,我得到了nil。
Account
在另一个视图控制器中,我尝试设置并打印其中一个变量。
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())
}
}
。
答案 0 :(得分:2)
您将test
声明为可选Account
--- Account?
是什么。
鉴于您从未将其初始化为任何内容,它将保持nil
并打印nil
。
要纠正此问题,您需要添加(正如vacawama在评论中所述):
test = Account() // test no longer nil
现在test
将是Account
的实例,而不是nil
。
另外一个例子,在操场上:
let test : Account?
print(test) // won't run
但
let test : Account?
test = Account()
print(test) // prints an instance of Account
此外,您的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"