2017-02-27 58 views
-3

我正在創建自定義iOS鍵盤,並且正在嘗試創建一個函數,該函數將使用JSON字典來查看要使用的符號。在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是因爲使用它更容易創建字典。我認爲一本字典很適合這種查找表。請你可以舉一個模型對象,結構或類如何更好地適應這種情況的例子。 –

回答

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]是不必要的,因爲對於字典查找返回值是可選的反正,不會設置標題爲按鈕標籤超出範圍。