2017-02-27 4 views
-3

カスタムiOSキーボードを作成していて、使用するシンボルを確認するためにJSON dictを使用する関数を作成しようとしています。ここでiOSで2D SwiftyJSONアレイを作成する

は私の関数である。

func switchSymbols(option: Int) { 
    for view in self.view.subviews { 
     if let button = view as? UIButton { 
      let buttonTag = button.tag 
      if (buttonTag > 0 && buttonTag < 100) { 
       if let text = symbolsDict?[buttonTag][option].stringValue { 
        print(symbolsDict) 
        button.setTitle(text, for: .normal) 
       } 
      } 
     } 
    } 
} 

そしてここでは、ファクトリ関数は、ルックアップ辞書を作成することです:

func symbolsDictFactory() -> JSON { 
    var dict:JSON = [:] 

    dict[1][0] = "1" 
    dict[1][1] = "[" 
    dict[2][0] = "2" 
    dict[2][1] = "]" 

    print(dict) 

    return dict 
} 

残念ながら、この第二の機能は、ブランクJSON配列を生成します。

リトル・ロスト。どんな助けもありがたい。前もって感謝します。

+1

何が失敗するのですか?クラッシュ、エラー、警告、何が起こっているのですか? –

+0

エラーを説明するエラーを更新しました。 –

+0

JSONを使用して辞書を作成する方が簡単なので、JSONを選択しました。そして、私は辞書がこの種のルックアップテーブルにうまく合うと思った。このような状況のためにモデルオブジェクト、構造体またはクラスがどのように優れているかの例を挙げてください。 –

答えて

1

アプリケーション内のデータとモデルにJSONを使用しないことをお勧めします。内部モデルは強く型付けされるべきです。

実際、JSONは実際にはタイプ[String: Any]です。これは、ボタンタグとオプション値の両方が整数なので、必要なものではありません。あなたのコードに記述する内容は[Int: [Int: String]]です。シンボルルックアップテーブルを返す関数を作成することには何も問題はありません。しかし、テーブルは定数であるため、このようなクラスを含むクラスのプロパティにするほうが簡単かもしれません。

class View: UIViewController { 
    private let titleForButton = [ 
    1: [0: "1", 1: "["], 
    2: [0: "2", 1: "]"], 
    // ... 
    99: [0: "", 1: ""] 
    ] 

    func switchSymbols(option: Int) { 
    for view in self.view.subviews { 
     if let button = view as? UIButton { 
     if let title = titleForButton[button.tag]?[option] { 
      button.setTitle(title, for: .normal) 
     } 
     } 
    } 
    } 
} 

辞書検索の戻り値はとにかくオプションで、ボタンのタイトルを設定しませんので、また、境界があなたがbutton.tagは、[1 .. < 100]内にあることのために持っていたことを確認することは不要ですタグが範囲外です。