我在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项目总是很快。所以可能有很多工作要做。经验告诉我们哪些表达是复杂且耗时的。如果你能对这些事情进行基准测试,那就太好了。

其他回答

在项目中使用Swift以外的其他名称。“Swift”是保留的。

你的项目叫Swift吗?看到这个消息,构建也会失败(<unknown>:0: error:模块名“Swift”是为标准库保留的)。尝试使用其他项目名称,例如SwiftTest。它会起作用的。

试一试:

Swift编译器/索引器有一个bug。有几条线 你的代码给它带来了困难。您必须编辑您的代码 使用其他文本编辑器注释掉有问题的行 然后你才能用Xcode打开这个项目。如果你有 不知道问题是什么,注释掉你所有的代码。一旦你有了 项目打开后,您可以开始一点一点地带回代码 直到CPU活动的增加告诉您已经找到了 问题。

我在Xcode6 beta 3中创建了一个在beta 2中创建的项目,遇到了同样的问题。

这是因为swift语言中出现了新的突破性变化,即数组声明语法。

检查受影响的代码由于破坏性的变化在beta 3。

http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf

我的例子之一是:

我不得不改变:

var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;

to

var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController

结论:看起来如果源代码中有错误,在某些情况下这个错误是由Xcode产生的。

解决方案,直到bug被修复:手动检查错误:)

古德勒克!

对我来说(xcode 6.1),原因是我忘记采用我的子类协议。

例如,这是错误的:

protocol SomeProtocol { ... }
class A :NSObject, SomeProtocol {
...
}
class B : A {
...
}

这是可以的:

protocol SomeProtocol { ... }
class A : NSObject, SomeProtocol {
...
}
class B : A, SomeProtocol {
...
}