让我们在课堂上的其他功能中看不到常数

时间:2016-09-05 23:47:10

标签: swift macos

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

这是为什么?我尝试在顶级代码中声明它,但我想调用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."
    }
}

}

列出项目

1 个答案:

答案 0 :(得分:2)

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

试试这个:

var jumbleDictionary: NSDictionary?

override func viewDidLoad() {
    super.viewDidLoad()

    jumbleDictionary = //whatever you want

}