【问题标题】:How to use NSObject properties如何使用 NSObject 属性
【发布时间】:2016-08-17 20:35:03
【问题描述】:

所以我有一个名为AccountNSObject,其中包含一些变量。我在类中添加了 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

【问题讨论】:

  • 您从未创建过Account 对象。你需要在某个时候做test = Account()
  • 您不应该手动添加 setter 和 getter。您可以通过 test?.firstName = "John"print(test.firstName) 获取/设置属性。

标签: ios swift optional


【解决方案1】:

您将test 声明为可选的Account --- 这就是Account?

鉴于您从未将其初始化为任何内容,它将保持nil 并打印nil

要更正此问题,您需要添加(如 vacawama 在 cmets 中所说):

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"

【讨论】:

  • 这就解释了!非常感谢
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 2011-03-04
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多