【问题标题】:Swift " Expression was too complex to be solved in reasonable time"Swift“表达式太复杂,无法在合理的时间内解决”
【发布时间】:2017-03-28 02:33:47
【问题描述】:
var KEB_Hana: [String: Any] = [:]

override func viewDidLoad() {
    super.viewDidLoad()
    perform(#selector(LaunchingViewController.showLaunch), with: nil, afterDelay: 2)
    // Do any additional setup after loading the view.
    indi.startAnimating()
    //        if let value = UserDefaults.standard.string(forKey: "introMessage") {
    //            introMessage.text = UserDefaults.standard.string(forKey: "introMessage")
    //        }

    if let value = UserDefaults.standard.object(forKey: "userBeacon") {
        KEB_Hana = UserDefaults.standard.object(forKey: "userBeacon") as! [String : Any]
        print(KEB_Hana)

        var Edit_Hana = "Beacon0 : " + KEB_Hana["beacon0"] + "Beacon1 : " + KEB_Hana["beacon1"] + "Beacon2 : " + KEB_Hana["beacon2"] + "Beacon3 : " + KEB_Hana["beacon3"]

        introMessage.text = Edit_Hana
    }
}

为什么顶部代码不起作用? 它表示“表达式太复杂,无法在合理时间内解决;考虑将表达式分解为不同的子表达式”

【问题讨论】:

  • 您需要解开并转换下标:var Edit_Hana = "Beacon0 : " + (KEB_Hana["beacon0"] as! String) ... 等所有其他下标。 (如果它们不是字符串,则根本无法以这种方式“添加”它们,因此我假设它们是字符串。)

标签: swift


【解决方案1】:

编译器放弃了猜测Edit_Hana 是什么类型。假设这些键的值是字符串:

let Edit_Hana = ["beacon0", "beacon1", "beacon2", "beacon3"]
    .map { "\($0) : \(KEB_Hana[$0] ?? "n/a")" }
    .joined(separator: ". ")

如果你想不小心,可以使用字符串插值:

let Edit_Hana = "Beacon0 : \(KEB_Hana["beacon0"]!). Beacon1 : \(KEB_Hana["beacon1"]!). Beacon2 : \(KEB_Hana["beacon2"]!). Beacon3 : \(KEB_Hana["beacon3"]!)"

【讨论】:

  • 我对你不应该的善意感到惊讶。非常感谢你
猜你喜欢
  • 2016-02-21
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多