Xcode swift:全局变量为空

时间:2015-06-25 23:03:00

标签: ios swift global-variables global

这是我的代码不起作用:

AppDelegate.swift

import UIKit

var systemLanguage = ""

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        // Systemsprache erkennen
        let systemLanguage = NSLocale.preferredLanguages()[0] as! String
        println("Device system language: \(systemLanguage)")

        return true
    }

settingsTableViewController.swift

override func viewDidLoad() {
        super.viewDidLoad()

        self.navigationController!.navigationBar.barStyle = UIBarStyle.Black
        self.navigationController!.navigationBar.tintColor = UIColor.whiteColor()

        if systemLanguage == "de" {

            self.title = "Einstellungen"

        } else {

            self.title = "Settings"

        }
        println("Device system language: \(systemLanguage)")

        self.tableView.backgroundColor = UIColor.darkGrayColor()

    }

当应用启动时,控制台会显示:设备系统语言:de

但是当我将视图更改为settingsTableViewController时,变量systemLanguage为空。控制台说:设备系统语言:

为什么会这样?

1 个答案:

答案 0 :(得分:1)

为什么呢?因为范围。您将局部变量命名为与实例变量相同。在您的app delegate中:

// Systemsprache erkennen
let systemLanguage = NSLocale.preferredLanguages()[0] as! String
println("Device system language: \(systemLanguage)")

return true
执行离开该功能的那一刻,

systemLanguage被释放。如果你把它改成了它就可以了:

// Systemsprache erkennen
systemLanguage = NSLocale.preferredLanguages()[0] as! String
println("Device system language: \(systemLanguage)")

return true

基本上,您分配的变量与您期望的变量不同。