Swift 项目编译时 Xcode 6.0.1 段错误

标签 xcode swift xcode6

当我尝试编译 Swift 项目时出现段错误。

这是导致错误的代码的简化版本:

enum PluginType
{
    case PluginC
    case PluginD
}

class Plugin
{
    var pluginType : PluginType
    var setter : Void -> Void
    var unsetter : Void -> Void

    init(pluginType : PluginType, setter : Void -> Void, unsetter : Void -> Void)
    {
        self.pluginType = pluginType
        self.setter = setter
        self.unsetter = unsetter
    }
}

@objc protocol BProtocol
{
    func getPlugins() -> [Plugin]
}

class B : BProtocol
{
    var a : AProtocol?

    func getPlugins() -> [Plugin]
    {
        return [Plugin(pluginType : .PluginC, setter : a!.setPluginC, unsetter : a!.unsetPluginC),
            Plugin(pluginType : .PluginD, setter : a!.setPluginD, unsetter: a!.unsetPluginD)]
    }
}

@objc protocol AProtocol
{
    func setPluginC()
    func unsetPluginC()
    func setPluginD()
    func unsetPluginD()
}

class A : AProtocol
{
    var b : BProtocol?

    func setPluginC()
    {

    }

    func unsetPluginC()
    {

    }

    func setPluginD()
    {

    }

    func unsetPluginD()
    {

    }
}

问题来自于这个方法:

    func getPlugins() -> [Plugin]
    {
        return [Plugin(pluginType : .PluginC, setter : a!.setPluginC, unsetter : a!.unsetPluginC),
            Plugin(pluginType : .PluginD, setter : a!.setPluginD, unsetter: a!.unsetPluginD)]
    }

问题是由我初始化的 setter 和 unsetter 引起的。

这是 Xcode 上的错误:

0 swift 0x000000010456a028 llvm::sys::PrintStackTrace(__sFILE*) + 40 1 swift
0x000000010456a514 SignalHandler(int) + 452 2 libsystem_platform.dylib 0x00007fff9596f5aa _sigtramp + 26 3 libsystem_platform.dylib 0x000007f83527198b _sigtramp + 2677023739 4 swift 0x00000001049290df swift::AbstractStorageDecl::hasObjCGetterAndSetter() const + 31 5 swift 0x0000000104929205 swift::AbstractStorageDecl::requiresObjCGetterAndSetter() const + 69 6 swift 0x00000001039ff3f4 swift::Lowering::SILGenFunction::emitGetAccessor(swift::SILLocation, swift::AbstractStorageDecl*, llvm::ArrayRef, swift::Lowering::RValueSource&&, bool, swift::Lowering::RValue&&, swift::Lowering::SGFContext) + 68 7 swift
0x0000000103a15ca4 swift::Lowering::SILGenFunction::emitRValueForPropertyLoad(swift::SILLocation, swift::Lowering::ManagedValue, bool, swift::VarDecl*, llvm::ArrayRef, bool, swift::Type, swift::Lowering::SGFContext) + 1284 8 swift
0x0000000103a2a012 swift::ASTVisitor<(anonymous namespace)::RValueEmitter, swift::Lowering::RValue, void, void, void, void, void, swift::Lowering::SGFContext>::visit(swift::Expr*, swift::Lowering::SGFContext) + 28402 9 swift
0x0000000103a2b6ed swift::Lowering::SILGenFunction::emitRValueAsSingleValue(swift::Expr*, swift::Lowering::SGFContext) + 45 10 swift
0x00000001039f3720 swift::Lowering::RValueSource::getAsSingleValue(swift::Lowering::SILGenFunction&, swift::Lowering::SGFContext) && + 176 11 swift
0x0000000103a44154 swift::Lowering::RValueSource::forwardInto(swift::Lowering::SILGenFunction&, swift::Lowering::AbstractionPattern, swift::Lowering::Initialization*, swift::Lowering::TypeLowering const&) && + 260 12 swift
0x0000000103a4400e swift::Lowering::RValueSource::materialize(swift::Lowering::SILGenFunction&, swift::Lowering::AbstractionPattern, swift::SILType) && + 334 13 swift 0x0000000103a340fc swift::Lowering::SILGenFunction::emitInjectOptionalValueInto(swift::SILLocation, swift::Lowering::RValueSource&&, swift::SILValue, swift::Lowering::TypeLowering const&) + 268 14 swift
0x0000000103a2b1fb swift::ASTVisitor<(anonymous namespace)::RValueEmitter, swift::Lowering::RValue, void, void, void, void, void, swift::Lowering::SGFContext>::visit(swift::Expr*, swift::Lowering::SGFContext) + 32987 15 swift
0x0000000103a2a325 swift::ASTVisitor<(anonymous namespace)::RValueEmitter, swift::Lowering::RValue, void, void, void, void, void, swift::Lowering::SGFContext>::visit(swift::Expr*, swift::Lowering::SGFContext) + 29189 16 swift
0x0000000103a2b63f swift::Lowering::SILGenFunction::emitIgnoredExpr(swift::Expr*) + 191 17 swift 0x0000000103a483f9 swift::Lowering::SILGenFunction::visitBraceStmt(swift::BraceStmt*) + 297 18 swift 0x0000000103a4b2d4 swift::ASTVisitor::visit(swift::Stmt*) + 148 19 swift
0x0000000103a188c3 swift::Lowering::SILGenFunction::emitFunction(swift::FuncDecl*) + 243 20 swift 0x00000001039f8646 swift::Lowering::SILGenModule::emitFunction(swift::FuncDecl*) + 230 21 swift 0x0000000103a12763 swift::ASTVisitor::visit(swift::Decl*) + 355 22 swift
0x0000000103a1112b SILGenType::emitType() + 203 23 swift
0x0000000103a0c0fe swift::Lowering::SILGenModule::visitNominalTypeDecl(swift::NominalTypeDecl*) + 30 24 swift 0x00000001039fa5cb swift::Lowering::SILGenModule::emitSourceFile(swift::SourceFile*, unsigned int) + 411 25 swift 0x00000001039fa88f swift::SILModule::constructSIL(swift::Module*, swift::SourceFile*, swift::Optional) + 335 26 swift
0x00000001039fa9d8 swift::performSILGeneration(swift::SourceFile&, swift::Optional) + 72 27 swift
0x00000001038dfda9 frontend_main(llvm::ArrayRef, char const*, void*) + 3353 28 swift 0x00000001038dd94d main + 1677 29 libdyld.dylib 0x00007fff99b5c5fd start + 1 30 libdyld.dylib 0x000000000000015a start + 1716140894

我正在寻找一种解决方法来避免编译器出现“段错误”。

有什么建议吗?

谢谢!

最佳答案

最后,我找到了解决方法:

func getPlugins() -> [Plugin]
{
    return [Plugin(pluginType : .PluginC, setter : { a!.setPluginC() }, unsetter : { a!.unsetPluginC() }),
        Plugin(pluginType : .PluginD, setter : { a!.setPluginD() }, unsetter: { a!.unsetPluginD() })]
}

这可以成功地与 Xcode 6.1 配合使用

关于Swift 项目编译时 Xcode 6.0.1 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26055655/

相关文章:

ios - 如何将单个 tileset 图像导入 xCode(Sprite Kit)?

ios - 在iOS中制作菜单来自左角

ios - Swift UIPickerView 标签错误

swift 类型类没有成员函数

objective-c - 在 Swift 的桥接头文件中替换 Objective-C 类函数宏?

objective-c - 为什么自动创建的 NSManagedObject 子类没有 "Proper" header ?

ios - 在自定义 View 的 Controller 中创建自定义 IBAction

ios - 在 ios swift 中自定义 Twitter 数字

swift - AVSpeechUtterance - Swift - 用短语初始化

swift - 使用 Swift,是否可以使用 UIAlertController 提示用户打开位置设置?