【问题标题】:"Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions"“表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式”
【发布时间】:2018-09-10 19:01:14
【问题描述】:

我真的需要帮助我将代码重构或分解成更小的部分。我的 Xcode 甚至无法构建项目,因为它太复杂了。

表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式

我不能分解成更小的部分,因为我必须将 UITextField 的结果分配给该函数以将其推送到后端。代码太乱了。

/* 这就是我为布尔值和选择赋值的地方 */

   @objc  func handleSaveMZHD()
    var NalichieTehPasportBol: Bool = false
    if NalichieTehPasportResponse.text == "Да"{
        NalichieTehPasportBol = true
    } else if NalichieTehPasportResponse.text == "Нет"{
        NalichieTehPasportBol = false
    }

    var NalichieElektroLambiBol: Bool = false
    if (ElektroLampiResponse.text == "Да"){
        NalichieElektroLambiBol = true
    } else if ElektroLampiResponse.text == "Нет"{
        NalichieElektroLambiBol = false
    }

    var NalichieLiftaBol: Bool = false
    if NalichieLiftaResponse.text == "Да"{
        NalichieElektroLambiBol = true
    } else if NalichieLiftaResponse.text == "Нет"{
        NalichieElektroLambiBol = false
    }

    var AktTehObsledSelection: Int = 0
    if AktTehnObsledovaniyaResponse.text == "аварийный"{
        AktTehObsledSelection = 1
    } else if self.AktTehnObsledovaniyaResponse.text == "Не аварийный"{
        AktTehObsledSelection = 2
    }

    var BalansPrinadlejnostiSel: Int = 0
    if BalansPrinadlejResponse.text == "Государственная Собственность" {
        BalansPrinadlejnostiSel = 1
    } else if BalansPrinadlejResponse.text == "Частная Собственность" {
        BalansPrinadlejnostiSel = 2
    }

    var OblicovkaSel: String = ""
    if OblicovkaResponse.text == "Монолит"{
        OblicovkaSel = "monolith"
    }else if OblicovkaResponse.text == "Кирпич"{
        OblicovkaSel = "brick"
    }else if OblicovkaResponse.text == "Блоки"{
        OblicovkaSel = "blocks"
    }else if OblicovkaResponse.text == "Облицовка"{
        OblicovkaSel = "facing"
    }

    /* That's function itself to push all that information to BackEnd */
    updaTeRecord(o_model: "property.building", id: 207, attrs: [
        "street": ulicaResponse.text,
        "parking_area": PlowadParkingaResponse.text,
        "builded_at": GodPostroikiResponse.text,
        "all_size": Int(ObwayaPlowadDomaResponse.text!),
        "land_size": Int(ObwayaPlowadUchastkaResponse.text!),
        "apartment_amount": Int(KolvoKvartirResponse.text!),
        "porch_amount": Int(KolvoPodezdovResponse.text!),
        "level_amount": KolvoEtajeiResponse.text,
        "is_tech_passport" : NalichieTehPasportBol,
        "entrance_state": SostoyaniePodezdResponse.text,
        "entrance_energy_saving_lamps": NalichieElektroLambiBol,
        "entrance_windows_count": KolvoOkonResponse.text,
        "entrance_windows_material": MaterialOkonResponse.text,
        "lift_provided": NalichieLiftaBol,
        "conclusion_of_technical_inspection": AktTehObsledSelection,
        "lift_amount": Int(KolvoLiftovResponse.text!),
        "lift_installed_at": DataUstanovkiLiftaResponse.text,
        "lift_lifetime": SrokEkspluatLiftaResponse.text,
        "lift_last_checked": DataPoslObslLiftaResponse.text,
        "lift_company": ObslujOrganizaciyaResponse.text,
        "lift_payment_method": TipOplatiLiftaResponse.text,
        "power_consumption": PotreblyaemayaMownostResponse.text,
        "registration_of_condominium": RegestraciyaKondominimumaResponse.text,
        "date_of_condominium": DataRegestraciyaKondominimumaResponse.text,
        "inventory_number": InvertarniiNomerResponse.text,
        "cadastral_number": KadastroviiNomerResponse.text,
        "date_of_the_last_overhaul": PosledniiKapitalniiRemontResponse.text,
        "energy_efficiency": KlassEnergoResponse.text,
        "house_balance": BalansPrinadlejnostiSel,
        "definition_isystem": InformacionnayaSystemaResponse.text,
        "ip_address_isystem": InformacionnayaIPadressResponse.text,
        "last_energy_audit_at": EnergoAudiotResponse.text,
        "number_of_sections": KolvoSekciiResponse.text,
        "service_life_of_the_building": SrokSlujbZdaniyaResponse.text,
        "depreciation": IznosMZHDResponse.text,
        "house_walls": OblicovkaSel
    ]) { (result) in
        print(result)
    }

【问题讨论】:

  • 请说明您的updaTeRecord 是如何声明的。
  • 这是我只传递这些参数的函数 func updaTeRecord(o_model:String, id:Int, attrs: Dictionary, completion: @escaping (_ result: JSON)->() ){
  • 您最好将该信息包含在您的问题文本中。

标签: swift refactoring swift4


【解决方案1】:

尝试像这样将您的呼叫拆分到updaTeRecord(o_model:id:attrs:completion:)

    let myAttributes: [String: Any] = [
        "street": ulicaResponse.text,
        "parking_area": PlowadParkingaResponse.text,
        "builded_at": GodPostroikiResponse.text,
        //...
        "service_life_of_the_building": SrokSlujbZdaniyaResponse.text,
        "depreciation": IznosMZHDResponse.text,
        "house_walls": OblicovkaSel
    ]
    updaTeRecord(o_model: "property.building", id: 207, attrs: myAttributes) { (result) in
        print(result)
    }

或者在大多数情况下这可能会更稳定(编译时不会出现类似问题):

    var myAttributes: [String: Any] = [:]
    myAttributes["street"] = ulicaResponse.text
    myAttributes["parking_area"] = PlowadParkingaResponse.text
    myAttributes["builded_at"] = GodPostroikiResponse.text
    //...
    myAttributes["service_life_of_the_building"] = SrokSlujbZdaniyaResponse.text
    myAttributes["depreciation"] = IznosMZHDResponse.text
    myAttributes["house_walls"] = OblicovkaSel
    updaTeRecord(o_model: "property.building", id: 207, attrs: myAttributes) { (result) in
        print(result)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多