2016-09-05 5 views
0

viewDidLoadで宣言した後、定数 "jumbleDictionary"が "solve:"メソッドで認識されないようです。他のクラスの関数に定数がありません

これはなぜですか?私はトップコードでそれを宣言しようとしましたが、NSDictionaryをロードするのにかかる時間を測定するDate()コールを置いて、それが "宣言を期待しています"というエラーになりました。

しかし、それをメソッドに入れると、他のメソッドからシンボルが隠れているようです。これが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." 
    } 
} 

}

リスト項目

答えて

2

これはスコープの問題です。メソッド内で変数が宣言されたとき。このメソッドにのみ表示されます。 jumbleDictionaryはviewDidLoad()メソッドの内部で定義されているため、ここでのみ使用できます。

var jumbleDictionary: NSDictionary? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    jumbleDictionary = //whatever you want 

} 
+0

ああ、私は持っていた方法は、それはObjective-Cの内のローカル変数のようなものです:

はこれを試してみてください? – Harold

+0

はい、その機能にローカルです。私が関数の外に置くところでは、変数はクラスのスコープにあります:クラスのどこでも使用できますが、他のクラスでは使用できません –

関連する問題