Ошибка Xcode swift с кодом выхода 254
Я получаю эту ошибку компилятора в своем коде, и я не могу понять, почему:
<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 все еще находятся в бета-тестировании, и это ошибка в Xcode? Также обратите внимание, что при комментировании двух ошибок друг от друга по одному сообщение об ошибке одно и то же.
Ответы
Ответ 1
Это ошибка компилятора Swift, очевидно, тестирование для двух или более неявно разворачиваемых опций приводит к сбою компилятора при некоторых или многих обстоятельствах. Используйте Apple 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
}
[...]
}
Ответ 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)
}
}
}
Похоже, что расширение NSArray с func, которое принимает аргумент функции, вызовет те же проблемы. Я работал над проблемой, определяя функцию forEachInArray
, которая принимает NSArray
в качестве аргумента:
func forEachInArray<T>(array: NSArray, f: (AnyObject -> ())) {
for elem in array {
f(elem)
}
}
Ответ 6
В моем случае я вызывал функцию objective-c из быстрого моста. Подпись была похожа -
- (SomeReturnType *)getSomething:(SomeOptions *)options
success:(void (^)(NSArray *response))success
failure:(void (^)(NSError *error))failure;
Из swift я вызывал его следующим образом и получал ошибку компиляции, так как "Ошибка Xcode swift с кодом выхода 254" -
ObjCClass().getSomething(nil, success: {(response : Array!) in
}, failure: {(error: NSError!) in
})
изменив его на следующие работающие для меня -
ObjCClass().getSomething(nil, success: {(response : [AnyObject]!) in
}, failure: {(error: NSError!) in
})
Ответ 7
У меня была эта ошибка, и ошибка была решена в бета-версии 7, доступной в Интернете сегодня.