繁体   English   中英

为什么我不能使用Swift 3中在viewDidLoad中定义的变量

[英]Why I can't use variable that I defined in viewDidLoad in swift 3

我在viewDidLoad定义了一个变量,但是问题是我无法在viewDidLoad之外的同一View Controller中使用该变量。

这是我的代码:

class ProfileSettingTableViewController: UITableViewController {

var userAccountMoney = String()

var headerList = ["account\(ProfileSettingTableViewController().userAccountMoney)" , "Help" , "" ]


override func viewDidLoad() {
    super.viewDidLoad()

    let userAccount = profileViewController().userMoney

    let numberFormatter = NumberFormatter()
    numberFormatter.locale = Locale(identifier: "fa")
    numberFormatter.numberStyle = NumberFormatter.Style.decimal
    numberFormatter.string(from: NSNumber(value: userAccount))
    userAccountMoney.append(numberFormatter.string(from: NSNumber(value: userAccount))!)

}

这段代码可以编译,但是即使我定义了例如让a = 1000,我也无法在viewDidLoad外部到达

问题是当您在任何方法之外初始化另一个属性时,您无法访问实例属性,因为编译器不知道哪个属性第一个初始化了,因此您需要做的是声明headerList仅将account字符串仅设置为数组的第一个对象,然后后者以新的价值对其进行了更改。

var userAccountMoney = String()
var headerList = ["account" , "Help" , "" ]

现在,在viewDidLoad只需将第一个对象替换为新值即可。

override func viewDidLoad() {
    super.viewDidLoad()

    let userAccount = profileViewController().userMoney

    let numberFormatter = NumberFormatter()
    numberFormatter.locale = Locale(identifier: "fa")
    numberFormatter.numberStyle = NumberFormatter.Style.decimal
    numberFormatter.string(from: NSNumber(value: userAccount))
    userAccountMoney = numberFormatter.string(from: NSNumber(value: userAccount))!
    self.headerList[0] = "account\(userAccountMoney)"
}

我猜您必须修改有关属性的Swift文档

在您的情况下,您有一个local variable其生命周期在当前作用域声明的末尾结束。 这意味着,如果您在viewDidLoad函数中声明了一个变量,它将在函数执行结束时终止。

更新:这里有一个简单的使用方法示例:

class MyViewController {
var userAccountMoney: String!

override func viewDidLoad() {
    super.viewDidLoad()
    userAccountMoney = numberFormatter.string(from: NSNumber(value: userAccount))!
}

func otherFunc() {
    var headerList = [String(describing:"Account \(userAccountMoney)")]
}
}

您可以将此变量置于函数之外,并作为实例变量。

    class VC: ViewController {
    var userAccountMoney = String()

    override func viewDidLoad() {
          super.viewDidLoad() 
          userAccountMoney = numberFormatter.string(from:
NSNumber(value: userAccount))!

                }

//access userAccountMoney anyWhere in the instance function of view Controller
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM