我在Xcode中遇到了一个问题,错误“源套件服务终止”正在弹出,所有语法高亮显示和代码完成都在Swift中消失了。我该如何解决这个问题?

下面是一个示例图像:


当前回答

当此错误开始弹出时,只需注释掉您编写的最后/最近的一段代码并等待一段时间。语法高亮显示应该会重新出现。这就是我解决这个问题的方法。

    func someFunc() -> (Int?, Int?, Int?) {
     var retVal1:Int? = nil
     var retVal2:Int? = nil
     var retVal3:Int? = nil

     //some other code

     //commenting out the line below helped me
     //(retVal1, retVal2, retVal3)
     return (retVal1, retVal2, retVal3)
    }

其他回答

在我的情况下,我已经导入桥接头丢失的文件。在我删除错误导入后,错误通知消失了。

为了解决这个问题,你的Swift代码可能会有一些奇怪的问题。例如,因为您正在复制和粘贴,所以有多个iboutlet的定义。通常这只是一个无法处理的语法错误。

今天有同样的问题,事情是与println,我只是尝试了旧的NSLog风格打印一个值:

// something like this
println("value = %@", valueObj)

我们应该如何在swift中组成字符串的方式已经从printf风格演变为内联风格,所以现在你可以像这样将你的值嵌入到格式字符串中:

"Here goes \(YOUR_VARIABLE)"

所以,对于上面的例子,解决方案是:

println("value =\(valueObj)")

Xcode 6.1 Beta 3:

一旦你在一个Swift文件中定义了一个非私有类型别名(例如typealias Foo = Int),在另一个文件中输入字母c, SourceKitService就会崩溃。

解决方案是要么放弃使用类型别名,等待下一个beta版本,要么将类型别名包装在类定义中:

public class DummyClass {
    public typealias Foo = String
}

像这样使用它:

var myVar:DummyClass.Foo?

一个只包含这两行的程序(在Swift语法方面可能是错误的)足以导致“SourceKitService Terminated”错误:

var x = 42
println("Hello", x)

使用let而不是var可以使编辑器恢复正常工作。Xcode 6.0版本(6A215l)