我在Xcode中遇到了一个问题,错误“源套件服务终止”正在弹出,所有语法高亮显示和代码完成都在Swift中消失了。我该如何解决这个问题?
下面是一个示例图像:
我在Xcode中遇到了一个问题,错误“源套件服务终止”正在弹出,所有语法高亮显示和代码完成都在Swift中消失了。我该如何解决这个问题?
下面是一个示例图像:
当前回答
Swift试图动态地而不是静态地找出所有内容的类型,但当它处理复杂类型(如链式过滤器、映射、flatMap调用)或大型字典时,这可能需要付出巨大的努力。有时你需要把它们分开,以便编译器更容易分析。这个问题的一个表亲是“太复杂而不能及时评估”的错误。想象一下,有几个几乎太复杂而无法及时评估的项目:它们一起变成了资源占用者。
试着找到所有您创建动态字典或使用无类型调用链的地方。尝试更具体地输入,特别是在变量声明处。
一些简单的例子:
字典
Bad:
let myDict = [ /* bunch of different things */ ]
好:
let myDict: [String: AnyObject] = [ /* bunch of different things */ ]
最好的:
let myDict: [String: SpecificType] = [ /* bunch of similar things */ ]
映射
Bad:
let filteredUserIds = users.filter({ user in user.enabled })
.flatMap { user in user.name != nil ? return user.id : return nil }
好:
let filteredUserIds: [Int] = users.filter({ user in user.enabled })
.flatMap { user in user.name != nil ? return user.id : return nil }
最好的:
let enabledUsers: [User] = users.filter { user in user.enabled }
let filteredUserIds: [Int] = enabledUsers.flatMap {
user in user.name != nil ? return user.id : return nil
}
好处还包括额外的检查代码,因为您总是会得到预期的类型或编译器错误。缺点是它开始看起来有点像Java。
当然,随着项目的发展,这个问题首先会积累起来。小型Swift项目总是很快。所以可能有很多工作要做。经验告诉我们哪些表达是复杂且耗时的。如果你能对这些事情进行基准测试,那就太好了。
其他回答
我的答案(Xcode6-Beta7)是简单地删除派生数据文件夹。
首选项>位置>衍生数据>单击箭头打开Finder >垃圾。
很明显,这种崩溃的发生有很多原因。
我在苹果的开发者论坛上找到了一个解决方案(需要登录,所以我也会在这里解释)。
TLDR:不要在Objective-C中导入与@interface同名的@protocol到Swift桥接头。例如,Facebook SDK有一个名为“FBGraphObject”的协议和接口。
以下是论坛帖子:
Adding Facebook SDK causes SourceKitService to crash. If you want to use beta 3 and you need Facebook SDK, one work around that I found and is working for me is refactoring Facebook SDK's @protocol FBGraphObject and renaming it to something like @protocol FBGraphObjectProtocol as an @interface FBGraphObject also exists and apparently SourceKit doesn't like it. It sure is a temporary solution just to keep you functional and you'll have to use Cocoapods or otherwise build Facebook SDK yourself rather than using the framework library. For the time being, you'll need to make sure you don't have conflicting @protocol and @interface declarations and that includes 3rd party libraries you may be using. This cost me today, hope it helps! Posted by e.parto on July 10, 2014
报告给苹果公司(#17266321):
细节:
简介: 如果我们试图将值作为数组打印一个字典,则弹出窗口会不断弹出-“SourceKit terminated.”编辑器功能暂时受限”。Xcode冻结并失去上下文识别,导致文本变黑。
复制步骤: 1. 创建一个数组为- "var iOSHistoryArray = ["iOS6","iOS7","iOS8",]"
创建一个字典as -"var MacOSYosemiteFeatures: dictionary = ["Device":iOSHistoryArray]"。 将字典打印为- "println("包含数组值的字典:%@ \n",MacOSYosemiteFeatures)"(< < -罪魁祸首——> >) 第3步导致了注释问题,这使得Xcode再次起作用。
预期结果: Xcode应该能正常工作。
实际结果: Xcode变得无功能,失去上下文识别(所有字体丢失,所有文本变成纯黑色),整个Xcode变成非活动。
版本: 版本6.0 (6A215l)
如果Xcode打开,退出Xcode。然后从终端运行:
defaults delete com.apple.dt.Xcode
这将把Xcode恢复到默认设置。打开Xcode,一切都可以正常工作了。
只是在这里添加一个潜在的解决方案,我不小心命名了一个类var与它的类型相同的名称:
class var Settings:Settings {
get { return classVarWorkAround.settings }
}
这肯定会使SourceKit崩溃。愚蠢的语法错误,但以防其他人犯同样的错误。
编辑:根据@Portland Runner:
类似地,如果将返回类型设置为func名称,则会得到错误。
func foo() ->foo{}