如何使用 NSObject 属性
How to use NSObject properties
所以我有一个名为 Account
的 NSObject
,里面有一些变量。我在 class 中添加了 getter 和 setter 方法,但是当我尝试设置值并调用获取它们时,我得到了 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
.
要更正此问题,您需要添加(如 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"
所以我有一个名为 Account
的 NSObject
,里面有一些变量。我在 class 中添加了 getter 和 setter 方法,但是当我尝试设置值并调用获取它们时,我得到了 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
.
要更正此问题,您需要添加(如 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"