【问题标题】:Swift string construction was too complex to be solved in reasonable timeSwift 字符串构造过于复杂,无法在合理的时间内解决
【发布时间】:2016-11-13 16:00:49
【问题描述】:

这是我的代码:

let request = NSMutableURLRequest(URL: NSURL(string: "http://www.example.com/submit.php")!)
request.HTTPMethod = "POST"
let postString = "user_name="+user_name+"&first_name="+first_name.text+"&last_name="+last_name.text+"&company_name="+company_name.text+"&location="+location.text+"&phone="+phone.text+"&website="+website.text+"&email="+email.text+"&about="+about.text
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
    print("responseString = \(responseString)")
}
task.resume()

当我尝试运行应用程序时,postString 上出现以下错误:

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

【问题讨论】:

  • 按照编译器告诉你的去做。与其将所有内容都填充在同一个表达式中,不如创建几个,它将帮助编译器知道会发生什么。 :)
  • @EricD 谢谢你。我该怎么做?
  • 你有一个postString 的大声明,在一行上添加了许多变量。相反,首先制作它的一部分,例如名称,并将其存储在变量中;然后使用另一行添加其余部分。喜欢let names = xxx + xxx 然后做let postString = names + xxx + xxx 等等。
  • 您的实际代码中是否也缺少 PHP URL 末尾的引号? (另外,避免直接字符串连接,使用字符串插值代替:"user_name=\(user_name)&first_name=\(first_name.text)&..."

标签: swift xcode


【解决方案1】:

试试这个:

let parameters = ["user_name" : user_name,
    "first_name" : first_name.text,
    "last_name" : last_name.text,
    "company_name" : company_name.text,
    "location" : location.text,
    "phone" : phone.text,
    "website" : website.text,
    "email" : email.text,
    "about" : about.text].map { "\($0)=\($1 ?? "")" }
let postString = parameters.joinWithSeparator("&")

该解决方案将首先创建一个包含参数及其值的字典(这也将提高代码的可读性和可维护性)。

然后它将在该字典上执行一个“映射”,将其转换为包含key=value 的字符串数组(如果由于UITextField 上的text 是可选的,它会将其设置为空字符串,如果它为nil )。

最后,它将通过使用分隔符&连接数组中的所有字符串来创建一个字符串

【讨论】:

  • 这是什么意思? .map { "\($0)=\($1 ?? "")" }
  • map 会将字典转换为字符串数组 $0 = 键,$1 = 字典中的值。有关地图功能的更多信息; useyourloaf.com/blog/swift-guide-to-map-filter-reduce。简而言之;对于我们正在映射的任何元素中的每个元素 - 执行此函数,并将该函数的返回值存储到一个新数组中
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
相关资源
最近更新 更多