为了账号安全,请及时绑定邮箱和手机立即绑定

Swift编译器错误:字符串连接上的“表达式太复杂”

Swift编译器错误:字符串连接上的“表达式太复杂”

繁星淼淼 2019-08-12 18:10:58
Swift编译器错误:字符串连接上的“表达式太复杂”我觉得这比任何事都更有趣。我修好了,但我想知道原因。这是错误:DataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions。为什么抱怨?这似乎是最简单的表达方式之一。编译器指向该columns + ");";部分func tableName() -> String { return("users"); } func createTableStatement(schema: [String]) -> String {     var schema = schema;     schema.append("id string");     schema.append("created integer");     schema.append("updated integer");     schema.append("model blob");     var columns: String = ",".join(schema);     var statement = "create table if not exists " + self.tableName() + "(" + columns + ");";     return(statement);}修复是:var statement = "create table if not exists " + self.tableName();statement += "(" + columns + ");";这也有效(通过@efischency),但我不喜欢它,因为我觉得(迷路了:var statement = "create table if not exists \(self.tableName()) (\(columns))"
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这与接受的答案几乎相同,但有一些额外的对话(我与Rob Napier,他的其他答案以及Cocoahead聚会的另一位朋友)和链接。

请参阅本讨论中的评论。它的要点是:

+运营商的负荷过重,截至目前有27个不同的功能,所以如果你是串联4串,即你有3个+运营商的编译器来检查,每次27个运营商之间,所以这是27 ^ 3倍。但那不是它。

还有一个检查,看看是否lhsrhs+功能是,如果他们是它调用通过核心的两个有效的append调用。在那里你可以看到可能会发生一些密集的检查。如果字符串是非连续存储的,那么如果你正在处理的字符串实际上是桥接到NSString的话就是这种情况。然后,Swift必须将所有字节数组缓冲区重新组装成一个连续的缓冲区,并且需要在此过程中创建新的缓冲区。然后你最终得到一个包含你试图连接在一起的字符串的缓冲区。

简而言之,有3个编译器检查集群会降低你的速度,即每个子表达式都必须根据它可能返回的所有内容重新考虑。因此,使用插值连接字符串即使用" My fullName is \(firstName)  \(LastName)""My firstName is" + firstName + LastName插值没有任何重载要好得多


查看完整回答
反对 回复 2019-08-12
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我有类似的问题:

expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

在Xcode 9.3中,行如下:

let media = entities.filter { (entity) -> Bool in

将其更改为以下内容后:

let media = entities.filter { (entity: Entity) -> Bool in

一切顺利。

可能它与Swift编译器有关,试图从代码中推断出数据类型。


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信