Xcode swift 失败,退出代码 254
Posted
技术标签:
【中文标题】Xcode swift 失败,退出代码 254【英文标题】:Xcode swift failed with exit code 254 【发布时间】:2014-06-11 03:26:27 【问题描述】:我的代码中出现了这个编译器错误,我不知道为什么:
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
错误出现在以下代码段中的某处:
var animalViewToSwap: AnimalView = animalViewMatrix.objectAtRow(0, andColumn: 0) as AnimalView
var currentRow = 0
var currentColumn = 0
var animalToSwapWith = true
var currentLocation = animalViewMatrix.findLocationOfObject(animalView)
currentRow = Int(currentLocation.row) - 1
currentColumn = Int(currentLocation.column) - 1
var rowDisplacement = 0
var columnDisplacement = 0
switch inDirection
case "left":
columnDisplacement = withDistance * -1
if (Int(animalViewMatrix.columns) > currentColumn + columnDisplacement)&&(currentColumn + columnDisplacement >= 0)&&(animalViewMatrix.objectAtRow(CInt(currentRow), andColumn: CInt(currentColumn + columnDisplacement)) is AnimalView)
animalToSwapWith = true;
else animalToSwapWith = false
default:
println("error")
animalToSwapWith = false
break
(我有更多非常相似的案例,为了简单起见,我将它们排除在外 - 错误不在其中)
第一个错误
一行中有一个错误:animalToSwapWith = false
如果我将其设置为 true 并将除变量初始化行之外的所有其余部分注释掉,错误就会消失。此外,如果我将所有内容都注释掉,但将 animalToSwapWith 实例化为 false,则会发生错误,即使它在实例化为 true 时不会发生。
第二个错误
行中有第二个错误:if (Int(animalViewMatrix.columns) > currentColumn + columnDisplacement)&&(currentColumn + columnDisplacement >= 0)&&(animalViewMatrix.objectAtRow(CInt(currentRow), andColumn: CInt(currentColumn + columnDisplacement)) is AnimalView)
在这一行中,所有这些方法都已在文件的前面使用上述相同类型的变量调用过,因此对方法的了解并不重要。
结论
出现这两个错误是有原因的,还是因为 swift 和 Xcode-6 仍处于 beta 测试阶段,这是 Xcode 中的一个错误?另请注意,当一次注释掉两个错误时,错误消息是相同的。
【问题讨论】:
请提交错误报告here! 【参考方案1】:这是一个 Swift 编译器错误,显然测试两个或多个隐式展开的选项会导致编译器在某些/许多情况下崩溃。使用Apple's Bugreporter 提交此问题,将其标记为与 rdar://17212295 重复。
示例
这是一个因相同错误而崩溃的最小示例:
let a: String!
let b: String!
if a && b
println("have both")
如下在命令行上编译并见证同样的崩溃:
$ xcrun swift -v -g crash.swift
【讨论】:
我也经历过。这是避免崩溃的一个很好的提示。谢谢!【参考方案2】:我遇到了同样的错误,我追查到这一点:我正在扩展 NSError
,并且在扩展中定义了一个 enum
。将 enum
定义从扩展中移出修复了该错误。
extension NSError
enum WYBErrorCodes: Int
case Fatal = 1000
case XmlParse = 1100
case CoreData = 1200
[...]
【讨论】:
感谢您的评论。我有类似的情况,我为 NSScanner 编写了一个扩展,并且在其范围内定义了一个枚举。你的建议奏效了。【参考方案3】:当我的班级采用 NSTextViewDelegate 协议时,我遇到了同样的错误。如果我删除该协议,编译就会正常。确实很奇怪。
【讨论】:
【参考方案4】:为了提供其他可能的原因以及如何解决它们;我试图在调度块中设置地图视图的区域。如果我注释掉区域的设置,错误就会消失。
dispatch_once(¢erMapLocation,
// var theSpan: MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
// var theRegion: MKCoordinateRegion = MKCoordinateRegionMake(manager.location.coordinate, theSpan)
// self.map.setRegion(theRegion, animated: true)
)
【讨论】:
【参考方案5】:当我尝试扩展 NSArray
以使用 foreach
方法时,我遇到了同样的错误:
extension NSArray
func foreach(f: (AnyObject -> ()))
for elem in self
f(elem)
使用带有函数参数的 func 扩展 NSArray 似乎会导致同样的问题。我通过定义一个将NSArray
作为参数的forEachInArray
函数来解决这个问题:
func forEachInArray<T>(array: NSArray, f: (AnyObject -> ()))
for elem in array
f(elem)
【讨论】:
【参考方案6】:在我的例子中,我从 swift 通过桥接调用了一个 Objective-c 函数。签名就像-
- (SomeReturnType *)getSomething:(SomeOptions *)options
success:(void (^)(NSArray *response))success
failure:(void (^)(NSError *error))failure;
从 swift 中,我按如下方式调用它并获得编译错误为“Xcode swift failed with exit code 254”-
ObjCClass().getSomething(nil, success: (response : Array!) in
, failure: (error: NSError!) in
)
将其更改为以下对我有用 -
ObjCClass().getSomething(nil, success: (response : [AnyObject]!) in
, failure: (error: NSError!) in
)
【讨论】:
【参考方案7】:我遇到了这个错误,该错误已在今天在线提供的 Beta 7 中得到解决。
【讨论】:
以上是关于Xcode swift 失败,退出代码 254的主要内容,如果未能解决你的问题,请参考以下文章
链接器命令失败,退出代码 1(使用 -v 查看调用)、Xcode 8、Swift 3
Clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)Xcode 10、Xcode 10.1 Beta、Swift 4.2
Xcode:Pod 安装后构建失败(错误:链接器命令失败,退出代码 1)