在iOS中创建2D SwiftyJSON数组

时间:2017-02-27 18:40:29

标签: ios swift swifty-json

我正在创建一个自定义iOS键盘,我正在尝试创建一个将使用JSON dict来查看要使用的符号的函数。

这是我的功能:

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 :(得分: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 ..&lt; 100]内的边界检查是不必要的,因为字典查找的返回值是可选的,并且不会为按钮标记设置标题。范围。