Swift 让常数不出现在类中的其他函数中

Swift 让常数不出现在类中的其他函数中,swift,macos,Swift,Macos,在我在viewDidLoad中声明了常量“jumbleDictionary”之后,“solve:”方法中似乎无法识别它 为什么会这样?我尝试在顶级代码中声明它,但我想用Date()调用来度量加载NSDictionary所需的时间,结果遇到了“预期声明”错误 但是把它放在一个方法中似乎对其他方法隐藏了这个符号。我不记得这在Objective-C中是一个问题-我记得,一个类的所有属性都可以在所有方法中使用 import Cocoa class JumbleController: NSViewCon

在我在viewDidLoad中声明了常量“jumbleDictionary”之后,“solve:”方法中似乎无法识别它

为什么会这样?我尝试在顶级代码中声明它,但我想用Date()调用来度量加载NSDictionary所需的时间,结果遇到了“预期声明”错误

但是把它放在一个方法中似乎对其他方法隐藏了这个符号。我不记得这在Objective-C中是一个问题-我记得,一个类的所有属性都可以在所有方法中使用

import Cocoa

class JumbleController: NSViewController {

@IBOutlet weak var scrambledWordField, solutionWordsField, elapsedTime: NSTextField!

override func viewDidLoad() {
    super.viewDidLoad()
    let jumbleDictionary: NSDictionary? = NSDictionary.init(contentsOfFile: Bundle.main.path(forResource: "BigDictionary", ofType: "plist")!)
}


@IBAction func solve(sender: NSTextField)
{
    let timeStart = Date.init()
    var userWordString = scrambledWordField.stringValue.lowercased()
    if Range(4...15).contains(userWordString.characters.count) {
        userWordString = String(Array(userWordString.characters).sorted())
        if let solutionWordArray = (jumbleDictionary?[userWordString] as? [String]?)!
        {
            let timeEnd = Date.init()
            solutionWordsField.stringValue = solutionWordArray.joined(separator: "\n").uppercased()
            elapsedTime.doubleValue = timeEnd.timeIntervalSince(timeStart)
        }
        else {
            solutionWordsField.stringValue = "No Solution Found."
        }
    }
    else {
        solutionWordsField.stringValue = "Must be 4 to 15 letters."
    }
}
}


列表项这是一个范围问题。在方法中声明变量时。它仅对该方法可见。由于jumbleDictionary是在viewDidLoad()方法中定义的,因此它仅在那里可用

试试这个:

var jumbleDictionary: NSDictionary?

override func viewDidLoad() {
    super.viewDidLoad()

    jumbleDictionary = //whatever you want

}

这是一个范围问题。在方法中声明变量时。它仅对该方法可见。由于jumbleDictionary是在viewDidLoad()方法中定义的,因此它仅在那里可用

试试这个:

var jumbleDictionary: NSDictionary?

override func viewDidLoad() {
    super.viewDidLoad()

    jumbleDictionary = //whatever you want

}

啊,所以我得到它的方式就像Objective-C中的局部变量?是的,它是该函数的局部变量。当我把它放在函数外时,变量现在在类的范围内:在类的任何地方都可用,但在其他类中不可用Sah,所以我的方法就像Objective-C中的局部变量?是的,它是该函数的局部变量。当我把它放在函数之外时,变量现在在类的作用域中:在类的任何地方都可用,但在其他类中不可用